如何使用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结果。
我认为,如果有人发现了这个词,请分享一下