Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用';%';PDO SQL中带有LIKE语句的通配符?_Php_Sql_Pdo - Fatal编程技术网

Php 如何使用';%';PDO SQL中带有LIKE语句的通配符?

Php 如何使用';%';PDO SQL中带有LIKE语句的通配符?,php,sql,pdo,Php,Sql,Pdo,我已经尝试了一段时间让我的代码查询我的MYSQL数据库中的博客帖子标签,但没有成功。这是当前形式的代码: $tags = explode(", ", $filter); $insert = ""; foreach ($tags as $key => $tag) { if ($key === 0) { $insert .= "where tags like :tag_{$key}"; } else { $insert .= " or t

我已经尝试了一段时间让我的代码查询我的MYSQL数据库中的博客帖子标签,但没有成功。这是当前形式的代码:

$tags = explode(", ", $filter);
$insert = "";
foreach ($tags as $key => $tag) {
    if ($key === 0) {
        $insert .= "where tags like :tag_{$key}";
    }
    else {
        $insert .= " or tags like :tag_{$key}";
    }
}
$query = $inDatabase->prepare("select * from blog_posts
    {$insert} 
    order by :order");
foreach ($tags as $key => $tag) {
    $query->bindParam("tag_{$key}", '%' . $tag . '%');
}
$query->bindParam(":order", $order);
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
我试过:

  • $query->bindParam(“tag{$key}”,“%$tag%”)
  • $insert.=“where标记,如“%”| |:标记{$key}| |'%”
  • $insert.=“where标记,如%?%”;
    […]
    $query->bindParam($key,$tag);
但不幸的是,我一直遇到这样的错误:无法通过引用传递参数2,并且总是在标记参数绑定到相应变量的行上出现错误(例如,
$query->bindParam(“tag{$key},“%”.$tag.%”;


有什么想法吗?

只需将
bindParam
更改为
bindValue
。这就是错误消息告诉您的。

当您得到回答问题的答案时,我觉得我还应该添加一条注释,警告您,像
这样带有前导通配符的查询可能非常慢。数据库必须读取数据库中的每一条记录查找匹配的表;如果它是一组小数据,那就很好了,但是随着表的增长,查询的速度会下降得很厉害。如果你期望有超过一千条记录,那么你应该考虑寻找一种替代方法来搜索你的数据。