假设 $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/