适用于PDO和MySQL IN/NOT IN查询的格式

Dre*_*rew 2 php mysql pdo

由于显而易见的原因,这是谋杀搜索......

我如何在PDO中执行此操作:

SELECT thing FROM things WHERE thing_uid IN ( ... )
Run Code Online (Sandbox Code Playgroud)

我的特定用例是一个字符串,它是通过爆炸从一个带有几十个复选框的表单中取出的数组构建的.在标准MySQL中,这很容易......

$thingString = implode("', '", $thingArray);
$q = "SELECT thing FROM things WHERE thing_uid IN ('$thingString')";
Run Code Online (Sandbox Code Playgroud)

但是我希望它能从PDO的反注射保护中获益......限制所有这些.那我该怎么办呢?

Dan*_*man 6

创建一个包含任意?数量值的数组,并将其放入查询中.

$placeholders = array_fill(0, count($thingArray), '?');
$sql = "SELECT thing FROM things WHERE thing_uid IN (" . implode(',', $placeholders) . ")";
Run Code Online (Sandbox Code Playgroud)

  • 也可以只使用[`array_fill()`](http://php.net/manual/en/function.array-fill.php) (2认同)
  • 所以我准备了占位符**?**与我的参数相等,然后`$ stmt->执行($ thingArray);`我很高兴去,对吗?(目前无法测试,所以我问) (2认同)