在PDO中实现LIKE查询

时间:2012-06-20 10:01:17

标签: php mysql pdo sql-like

我在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在语法上是否正确?

5 个答案:

答案 0 :(得分:72)

您必须在%中添加$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"%'的内容,因为预准备语句在已引用的字符串中引用您的值。

答案 1 :(得分:5)

不,您不需要引用准备占位符。另外,在变量中包含%标记。

LIKE ?

在变量中:%string%

答案 2 :(得分:4)

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

答案 3 :(得分:2)

您可以在下面看到示例

$title = 'PHP%';
$author = 'Bobi%';
// query
$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";
$q = $conn->prepare($sql);
$q->execute(array($title,$author));

希望它能奏效。

答案 4 :(得分: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)) { ... }