”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么PDO准备语句无法通过LIKE查询返回结果?

为什么PDO准备语句无法通过LIKE查询返回结果?

发布于2024-11-03
浏览:830

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

PHP 中的 PDO 准备语句:MySQL LIKE 查询的问题

PHP 与 MySQL 的 PDO 类提供了一种使用参数化查询执行 SQL 语句的机制,提高安全性和性能。但是,用户在使用 LIKE 查询时可能会遇到困难。

问题:PDO 准备语句未使用 LIKE 查询返回结果

当尝试执行类似于以下内容的查询时使用 PDO:

SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"

用户可能会发现没有返回结果。

解决方案:正确参数化

问题出在搜索词的参数化不正确。在 PHP 中,准备好的语句使用命名占位符,这需要不同的语法。 LIKE 查询的正确参数化是:

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

解释:

准备好的语句将数据与查询分开并使用占位符。因此,不需要将搜索词用双引号括起来或执行字符串连接。

其他常见错误:

WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect
  • 这种方法是不正确的,因为它添加了不必要的双引号。
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect
  • 参数化不需要使用 CONCAT 将搜索词包装在查询中。

通过使用正确的参数化,您可以使用以下命令成功执行 LIKE 查询PDO 在 PHP 中准备了语​​句。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3