PHP PDO MySQL LIKE 和准备好的语句

标签 php mysql pdo

假设 $search 是用户输入的字符串,$db 是有效的 PDO 引用。

据我了解,以下 block 是首选并且应该有效:

$imageStatement = $db->prepare("SELECT
images.whatever
FROM images
WHERE images.title LIKE :titleSearch OR images.description LIKE :descriptionSearch");
$imageStatement->bindValue(':titleSearch', "%{$search}%");
$imageStatement->bindValue(':descriptionSearch', "%{$search}%");
$images = $imageStatement->fetchAll();

它返回 0 个结果,而以下返回预期的返回:

$search = $db->quote("%{$search}%");
$images = $db->query("SELECT
images.whatever
FROM images
WHERE images.title LIKE {$search} OR images.description LIKE {$search}")->fetchAll();

我做错了什么?

最佳答案

您从未执行过 PDO 语句。绑定(bind)参数后,在检索结果之前调用 execute

$imageStatement->bindValue(':titleSearch', "%{$search}%");
$imageStatement->bindValue(':descriptionSearch', "%{$search}%");
$imageStatement->execute(); //ADD THIS STATEMENT
$images = $imageStatement->fetchAll();

PDO 的query 函数不需要调用execute,因为它不是参数化查询。

关于PHP PDO MySQL LIKE 和准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980148/

相关文章:

php - 锁表sql+php PDO

javascript - 如何显示来自 mysql 的数据以及使用 javascript 发送的 id ( Adob​​e Phonegap )

javascript - 如何将javascript变量传递给site_url的参数值?

PHP 限制输出 MYSQL

MySQL内部连接在同一个表和对上

php - 如何判断连接的数据库是MariaDB还是MySQL?

mysql - 为什么我们不应该在生产服务器上的 mysql 查询中使用 Select *?

php - Htaccess 重写目录到文件

javascript - Ajax 函数通过单击按钮显示日期选择器

php - 使用 PHP mail() 发送电子邮件时,将什么用作 "spam-filter"?