2017-04-18 111 views
0

我需要使用PDO在PHP中构建SQL语句,并且WHERE子句中的值数是动态的。将WHERE参数动态添加到PDO sql语句

例如

SELECT column1, column2 FROM table WHERE category = :category OR category = :category 

在这种情况下,有2个类别的where子句中,我比较在,但它可能会超过200,所以我不能只用:类别1和:产品组别的名称。

我尝试以下,但它给人一种 “常规错误:2031” 信息

$where = array("category = :category", "category = :category"); 
    $params = array("abc", "xyz"); 
    $query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
    $s= $h->prepare($query); 
    $s->setFetchMode(PDO::FETCH_ASSOC); 
    $s->execute(array_values($params)); 

有什么建议?

回答

0

如果有很多种类,使用SQL IN声明

你可以看看这里的如何将其绑定到你的数组: Can I bind an array to an IN() condition?

+0

感谢您的快速回复。我会研究IN()条件。 – user1480951

+1

这应该作为重复的标志发布,而不是作为答案。 – Shadow

+0

@Shadow如果OP不知道“IN”语句,他不能搜索如何将参数绑定到它。 – blue112

-1

见上述评论关于语句,但在情况下,如果你还打算使用动态生成的其中一部分,你要么使用问号或每个PDO伪变量创建的唯一名称(?):

$where = array("category = ?", "category = ?"); 
$params = array("abc", "xyz"); 
$query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
$s= $h->prepare($query); 
$s->setFetchMode(PDO::FETCH_ASSOC); 
$s->execute($params); 

这里阅读更多德尾巴:http://php.net/manual/en/pdo.prepare.php

+0

您的陈述部分正确,但您应该更多关注您发布的代码 –