在 PDO 中实现 LIKE 查询

2022-08-30 11:06:50

我在PDO中实现LIKE时遇到问题

我有这个查询:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);

我检查了,它们包含我想搜索的单词,我的PDO工作正常,因为我的一些查询它们工作正常,只是我在PDO中不熟悉。$var1$var2SELECTINSERTLIKE

结果为不返回。我的语法是否正确?$query


答案 1

您必须在 中包含符号,而不是在查询中包含符号:%$params

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);

如果在前面的代码中查看生成的查询,则会看到类似 的内容,因为预准备语句在已带引号的字符串中引用值。SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%'


答案 2

只需使用以下方法:

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%')
            OR address LIKE CONCAT('%', :var2, '%')";

$ar_val = array(':var1'=>$var1, ':var2'=>$var2);
if($sqlprep->execute($ar_val)) { ... }

推荐