使用预准备语句解释PDO IN子句

时间:2016-06-08 21:52:44

标签: php mysql pdo

我正在读这个答案:PHP - Using PDO with IN clause array

它使用代码:

$in_array = array(1, 2, 3);
$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();

任何人都可以解释他们使用

的原因

$in = str_repeat('?,', count($in_array) - 1) . '?';

取而代之的是:

$in = str_repeat('?,', count($in_array));

我很困惑,无法弄清尾随- 1) . '?'

背后的逻辑

1 个答案:

答案 0 :(得分:0)

这是因为str_repeat()函数重复一个字符串指定的次数,而count()函数将返回数组的长度,这意味着它将导致"?,?,?,?,? "如果数组长度为5(假设),它看起来格式不正确,为什么要计算($ in_array)-1'?'已经使用了附件。