gpt4 book ai didi

php - 将命名参数与 PDO 一起用于 LIKE

转载 作者:IT王子 更新时间:2023-10-29 00:11:37 25 4
gpt4 key购买 nike

我正在尝试使用 LIKE 在我的数据库中搜索 name 字段。如果我像这样“手工”制作 SQL:

$query = "SELECT * \n"
. "FROM `help_article` \n"
. "WHERE `name` LIKE '%how%'\n"
. "";
$sql = $db->prepare($query);
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();

然后它会返回'how'的相关结果。
然而,当我把它变成准备好的声明时:

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

我总是得到零结果。

我做错了什么?我在代码的其他地方使用准备好的语句,它们工作正常。

最佳答案

绑定(bind)的 :placeholders 不应该用单引号引起来。这样他们就不会被解释,而是被视为原始字符串。

当您想将一个用作LIKE 模式时,请将% 与值一起传递:

$query = "SELECT * 
FROM `help_article`
WHERE `name` LIKE :term ";

$sql->execute(array(":term" => "%" . $_GET["search"] . "%"));

哦,实际上你需要先清理这里的输入字符串(addcslashes)。如果用户在参数中提供任何无关的 % 字符,那么它们将成为 LIKE 匹配模式的一部分。请记住,整个 :term 参数作为字符串值传递,并且该字符串中的所有 % 都成为 LIKE 子句的占位符。

关于php - 将命名参数与 PDO 一起用于 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com