将WHERE参数动态添加到PDO sql语句

时间:2017-04-18 13:43:55

标签: php mysql pdo

我需要使用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));

有什么建议吗?

2 个答案:

答案 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