>我在PDO中实现LIKE时遇到问题
我有这个查询:
$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);
我检查了$var1
,$var2
它们包含我要搜索的两个单词,我的 PDO 工作正常,因为我的一些查询SELECT
INSERT
它们有效,只是我不熟悉 PDO 中的LIKE
。
结果是未返回任何内容。我的$query
语法正确吗?
您必须
在$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"%'
的内容,因为预准备语句在已经引出的字符串中引用你的值。
只需使用以下内容:
$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)) { ... }
不,您不需要引用准备占位符。此外,在变量中包含 % 标记。
LIKE ?
在变量中:%string%
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
你可以看到下面的例子
$title = 'PHP%';
$author = 'Bobi%';
// query
$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";
$q = $conn->prepare($sql);
$q->execute(array($title,$author));
希望它能奏效。