如何使用LIKE语句创buildPDO参数化查询?

这是我的尝试:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"'); $query->execute(array('value')); while ($results = $query->fetch()) { echo $results['column']; } 

我贴出来后马上就想出来了:

 $query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%')); while ($results = $query->fetch()) { echo $results['column']; } 

要使用Like来进行%部分匹配,您还可以使用命名参数:something column like concat('%', :something, '%') (换句话说,使用显式非转义的%符号,绝对不是用户input) :something

编辑:我find了一种替代语法是使用连接运算符:||,所以它将变得简单: where column like '%' || :something || '%' etc where column like '%' || :something || '%' etc

@ bobince 在这里提到:

当您想要在searchstring中允许使用字符%_字符时, 遇到困难 ,而没有将其用作通配符。

所以当结合像和参数化时,这是别的东西。

 $query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->bindValue(1, "%$value%", PDO::PARAM_STR); $query->execute(); if (!$query->rowCount() == 0) { while ($results = $query->fetch()) { echo $results['column'] . "<br />\n"; } } else { echo 'Nothing found'; } 

你也可以试试这个。 我面临类似的问题,但经过研究得出结果。

 $query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search'); $stmt= $pdo_connection->prepare($query); $stmt->execute(array(':search' => '%'.$search_term.'%')); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($result); 

这工作:

 search `table` where `column` like concat('%', :column, '%') 

PDO转义为“%”(可能会导致sql注入) :使用前面的代码会给出期望的结果,当匹配部分string但是如果访问者键入字符“%”,即使你不'没有任何东西存储在数据库中(可能导致sql注入)

我已经尝试了很多的变化,所有的结果都是相同的.PDO正在转义“%”,导致不需要/不受欢迎的search结果。

我认为,如果有人发现了这个词,请分享一下