首页 >数据库 >mysql教程 >为什么我的 PHP PDO 准备语句不能与 MySQL LIKE 查询一起使用?

为什么我的 PHP PDO 准备语句不能与 MySQL LIKE 查询一起使用?

Patricia Arquette
Patricia Arquette原创
2024-11-30 10:41:13440浏览

Why Doesn't My PHP PDO Prepared Statement Work with MySQL LIKE Queries?

PHP PDO 准备语句 - MySQL LIKE 查询:一个难题

使用 PHP 的 PDO 类(MySQL 驱动程序)时,使用准备语句执行 MySQL LIKE 查询可以是一项令人困惑的任务。看似简单的语法通常无法产生所需的结果。

考虑以下使用 MySQL 客户端无缝检索数据的查询:

SELECT   ...
FROM      hs
...
WHERE     hs.hs_text LIKE "%searchTerm%"
LIMIT 25;

难题

但是,将此查询移植到 PHP 后,您可能会遇到无法返回任何结果的挫败感,无论您使用哪种语法 试图。下面的代码演示了此问题:

$sql = 
    'SELECT   ...
    FROM      hs
    ...
    WHERE     hs.hs_text LIKE :searchTerm
    LIMIT 25';

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

尝试将搜索词提供为 CONCAT('%', ?, '%')、"%:searchTerm%" 或 ":searchTerm",而相应地修改执行行,证明是徒劳的。

解决方案

解决这个难题的关键在于理解准备好的语句如何处理数据。它们与查询分开传送数据,从而在嵌入值时无需引号。

因此,正确的解决方案是:

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

通过从搜索词参数中删除封闭的双引号,您现在可以利用准备好的语句的力量,让您成功执行 LIKE 查询。

以上是为什么我的 PHP PDO 准备语句不能与 MySQL LIKE 查询一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn