当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用LIKE语句创建PDO参数化查询?》经验,为你挑选了4个好方法。

这是我的尝试:

$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和参数化时需要注意的其他事项.



1> Andrew G. Jo..:

我发布后立即想出来:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));

while ($results = $query->fetch())
{
    echo $results['column'];
}


PDO应该在执行调用中转义该%.卡凯的答案更好

2> Kzqai..:

要使用与%部分匹配的Like,您还可以执行此操作:column like concat('%', :dangerousstring, '%')使用命名参数:dangerousstring.换句话说,在您自己的查询中明确使用未转义的%符号,这些符号是分开的,绝对不是用户输入.

编辑:我发现的另一种连接语法是使用连接运算符:||,所以它将变得简单: where column like '%' || :dangerousstring || '%' etc

@bobince 在这里提到:

在 困难 来的时候,你要允许文字%_搜索字符串中的字符,而不用它作为通配符.

因此,在组合like和参数化时需要注意的其他事项.


+1 - 这对我来说似乎是一个很好的方法,因为在占位符被替换之后,所有的连接都发生在数据库中,这意味着可以使用命名的占位符.值得一提的是上面的语法适用于Oracle - 在MySQL中语法是`LIKE CONCAT('%',:something,'%')`.参考:http://stackoverflow.com/a/661207/201648

3> Blazer..:
$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'; }



4> Vijaysinh Pa..:

你也可以试试这个.我面临类似的问题,但研究后得到了结果.

$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);


重复一遍,我没有就你的问题投票; 其他人贬低了.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有