这是我的尝试:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"'); $query->execute(array('value')); while ($results = $query->fetch()) { echo $results['column']; }
Andrew G. Jo.. 121
我发布后立即想出来:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%')); while ($results = $query->fetch()) { echo $results['column']; }
PDO应该在执行调用中转义该%.卡凯的答案更好 (2认同)
Kzqai.. 74
要使用与%部分匹配的Like,您还可以执行此操作:column like concat('%', :dangerousstring, '%')
使用命名参数:dangerousstring
.换句话说,在您自己的查询中明确使用未转义的%符号,这些符号是分开的,绝对不是用户输入.
编辑:我发现的另一种连接语法是使用连接运算符:||,所以它将变得简单:
where column like '%' || :dangerousstring || '%' etc
@bobince 在这里提到:
在 困难 来的时候,你要允许文字
%
或_
搜索字符串中的字符,而不用它作为通配符.
因此,在组合like和参数化时需要注意的其他事项.
我发布后立即想出来:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%')); while ($results = $query->fetch()) { echo $results['column']; }
要使用与%部分匹配的Like,您还可以执行此操作:column like concat('%', :dangerousstring, '%')
使用命名参数:dangerousstring
.换句话说,在您自己的查询中明确使用未转义的%符号,这些符号是分开的,绝对不是用户输入.
编辑:我发现的另一种连接语法是使用连接运算符:||,所以它将变得简单:
where column like '%' || :dangerousstring || '%' etc
@bobince 在这里提到:
在 困难 来的时候,你要允许文字
%
或_
搜索字符串中的字符,而不用它作为通配符.
因此,在组合like和参数化时需要注意的其他事项.
$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'] . "
\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);