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

2022-08-30 07:10:53

这是我的尝试:

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

$query->execute(array('value'));

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

答案 1

在我发布后立即弄清楚了:

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

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

答案 2

对于使用命名参数的用户,以下是如何对MySQL数据库进行部分匹配:LIKE%

WHERE column_name LIKE CONCAT('%', :dangerousstring, '%')

其中,命名参数为 。:dangerousstring

换句话说,在你自己的查询中使用显式未转义的符号,这些符号是分开的,绝对不是用户输入。%

编辑:Oracle 数据库的串联语法使用串联运算符:,因此它只会变成:||

WHERE column_name LIKE '%' || :dangerousstring || '%'

但是,正如@bobince在这里提到的,有一些警告:

当您希望在搜索字符串中允许文本或字符而不将其用作通配符时,困难就来了。%_

因此,在结合喜欢和参数化时,这是需要注意的其他事项。


推荐