PHP PDO MySQL LIKE和准备好的语句

时间:2013-04-12 20:17:23

标签: php mysql pdo

假设$search是来自用户输入的字符串,$db是有效的PDO参考。

根据我的理解,以下块是首选,应该有效:

$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();

我做错了什么?

1 个答案:

答案 0 :(得分:7)

您从未执行过您的PDO声明。绑定参数后,请在检索结果前致电execute

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

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