【问题标题】:Searching MySQL database搜索 MySQL 数据库
【发布时间】:2014-06-02 02:47:20
【问题描述】:

我正在制作一个电影网站,您可以通过数据库搜索找到想要的标题,但我有一个问题...... 如何使用 PDO 搜索数据库?我有这样的事情:

$search=$_GET['search'];
$search='%'.$search.'%';
$db = new mysqli($DBhost, $DBuser, $DBpassword, $DBdatabase);
$sql="SELECT id, title, year, front_image, description FROM a358_filmovi WHERE title LIKE ?";
$sl=$db->prepare($sql);
$sl->bind_param('s',$search);
$sl->execute();
$sl->bind_result($id, $title, $year, $front_image, $description);
while($sl->fetch()){
?>
    DATA OUTPUT
<?php
}

问题是我录制了哈利波特与死亡圣器:第 1 部分,如果我搜索哈利波特,它会显示该电影作为结果,但是如果我搜索 Harry potter,它不会显示任何内容(空白结果)。

这只是一个示例电影,它不适用于数据库中的任何电影。

如何编辑此代码以匹配搜索输入的每个结果,大写或小写?



提前致谢。

【问题讨论】:

  • @Devon Well 不是 's' 代表 'string','i' 代表 'integer' 等等吗?
  • 我的错,我误解了你的目的。
  • 将列编码更改为 utf_general_ci
  • 您的代码不是 PDO。或者,您是在问如何使用 PDO 做到这一点?

标签: php search pdo mysqli


【解决方案1】:

如果您询问如何在 PDO 中执行此操作,则非常相似。您可以在 execute() 函数中绑定参数以避免也使用 bindParam()。

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$sql="SELECT id, title, year, front_image, description FROM a358_filmovi WHERE title LIKE ?";
$sl=$db->prepare($sql);
$sl->execute(array('%'.$_GET['search'].'%');

应该可以。

不要使用 SQL 或 PHP 进行不区分大小写的搜索,最好将架构中的列编码更改为 _ci(ci 代表不区分大小写)。

【讨论】:

  • 这还不区分大小写吗?
  • 有什么区别?
  • 我已经更新了它,详细说明了 PDO 和列编码。
  • @Vlada903 好问题。我不确定您将如何使用 SQL 来做到这一点,我确信有一种方法,尤其是全文。使用 PHP,我可以考虑用 explode(' ') 拆分单词并为每个单词添加 LIKE %word% AND
  • @Vlada903 - LIKE 运算符根本不允许像这样的模糊搜索。您需要使用全文搜索引擎。这就是它们被发明的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2012-04-01
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多