【问题标题】:Pass array to where clause in PDO [duplicate]将数组传递给 PDO 中的 where 子句 [重复]
【发布时间】:2014-05-13 06:53:20
【问题描述】:

我有一个数组family like -

Array ( [0] => 2510-24 [1] => 2510-48 [2] => 2510G [3] => 2520 [4] => 2520G [5] => 2530ya [6] => 2530ya3 [7] => 2530yb [8] => 2610 [9] => 2615 [10] => 2620 [11] => 2626 [12] => 2650 [13] => 2810 [14] => 2900 [15] => 2910 [16] => 2915 [17] => 2920 [18] => 3500 [19] => 3500jr [20] => 3500strk [21] => 3800 [22] => 3800FIPS [23] => 4100 [24] => 4200 [25] => 5300 [26] => 5400 [27] => 5400FIPS [28] => 5400R [29] => 5400RFIPS [30] => 5900 [31] => 6100 [32] => 6200 [33] => 6600 [34] => 8200 [35] => 8200FIPS [45] => Mako [46] => MSM317 [47] => MSM430 [48] => MSM460 [49] => MSM466 [50] => MSM720 [51] => MSM760 [52] => MSM765 [53] => MSM775 [54] => stack-AR [55] => stack-TA ) 

现在我有一个 db 查询,我想在我的数据库中只查询其中 family 是上述之一的行。

我累了——

$status = 'passed';
$allTest = $conn->prepare('SELECT SUM( IF( STATUS = :status, 1, 0 ) ) passed_count FROM tooldata WHERE family IN (".$family.") GROUP BY family ORDER BY family' );
$allTest->execute(array(':status' => $status));

甚至内爆 -

$family = implode(',',$family);

// Finding passed test cases on each platform   

    $status = 'passed';
    $allTest = $conn->prepare('SELECT SUM( IF( STATUS = :status, 1, 0 ) ) passed_count FROM tooldata WHERE family IN ('.$family.') GROUP BY family ORDER BY family' );
    $allTest->execute(array(':status' => $status));

但这不起作用。这里有什么问题? 有什么更好的方法来做同样的事情?

【问题讨论】:

  • 只需使用implode()
  • @hindmost 即使这样也不行

标签: php arrays pdo


【解决方案1】:
$imploded_family = implode(',', array_map([$conn, 'quote'], $family));
$allTest = $conn->prepare('SELECT SUM( IF( STATUS = :status, 1, 0 ) ) passed_count FROM tooldata WHERE family IN ('.$imploded_family.') GROUP BY family ORDER BY family' );

【讨论】:

  • -1 用于将实际数据放入 sql 查询中
  • @ThiefMaster 实际上,将普通参数与数组类型的参数混合在一起会变得更加不守规矩。这样做并不一定是坏事。
  • @ThiefMaster PDO 不允许在此类查询中以有意义的方式使用占位符。使用任意数量的参数创建准备好的查询听起来也不是一种方法
  • 呸。无论如何,如果您编辑您的帖子以提及这一点,我将删除(当前锁定的)downvote。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2018-07-17
  • 2020-03-17
  • 1970-01-01
  • 2012-01-13
  • 2019-11-13
相关资源
最近更新 更多