【问题标题】:Explanation of PDO IN clause using prepared statements使用准备好的语句解释 PDO IN 子句
【发布时间】:2016-06-08 21:52:44
【问题描述】:

我正在阅读这个答案: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) . '?'背后的逻辑

【问题讨论】:

  • 因为它将以IN (?,?,?,) 结尾(请参阅额外的逗号)
  • 正如@Federico 所说......这是关于尾随逗号的。对于三个占位符,只需要两个逗号。可能是$in = '?' . str_repeat(',?', count($in_array) - 1);

标签: php mysql pdo


【解决方案1】:

这是因为 str_repeat() 函数将字符串重复指定的次数,并且 count() 函数将返回数组的长度,这意味着它将导致 "?,?,?,?,?," if数组长度是 5(假设),它看起来没有格式化,这就是为什么 count($in_array)-1 和 '?' append 已被使用。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多