我需要使用PDO在PHP中构建一个SQL语句,并且WHERE子句中的值的数量是动态的。
e.g。
SELECT column1, column2 FROM table WHERE category = :category OR category = :category
在这种情况下,我在比较的where子句中有两个类别,但它可能超过2个,所以我不能只使用:category1和:category2作为名称。
我尝试了以下内容,但它提供了“常规错误: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 :(得分:0)
如果有多个类别,请使用SQL IN
语句
您可以在此处查看如何将其绑定到您的数组: Can I bind an array to an IN() condition?
答案 1 :(得分:-1)
请参阅上面关于IN语句的注释,但如果您仍计划使用动态生成的部分,则应使用问号(?)或为每个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