我正在尝试搜索name
我的数据库中的字段使用LIKE
。如果我像这样“手工”编写 SQL:
$query = "SELECT * \n"
. "FROM `help_article` \n"
. "WHERE `name` LIKE '%how%'\n"
. "";
$sql = $db->prepare($query);
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();
然后它将返回“如何”的相关结果。
然而,当我把它变成一个准备好的声明时:
$query = "SELECT * \n"
. "FROM `help_article` \n"
. "WHERE `name` LIKE '%:term%'\n"
. "";
$sql->execute(array(":term" => $_GET["search"]));
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();
我总是得到零结果。
我究竟做错了什么?我在代码的其他地方使用准备好的语句,它们工作得很好。
界限:placeholders
不应该用单引号引起来。这样它们就不会被解释,而是被视为原始字符串。
当你想使用一个作为LIKE
模式,然后通过%
连同值:
$query = "SELECT *
FROM `help_article`
WHERE `name` LIKE :term ";
$sql->execute(array(":term" => "%" . $_GET["search"] . "%"));
哦,实际上你需要先清理这里的输入字符串(addcslashes)。如果用户提供任何无关的%
参数中的字符,然后它们成为 LIKE 匹配模式的一部分。请记住,整个:term
参数作为字符串值传递,并且所有%
该字符串中的 s 成为 LIKE 子句的占位符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)