【问题标题】:PDO insert using an array loop使用数组循环插入 PDO
【发布时间】:2014-04-13 19:51:06
【问题描述】:

我见过一些与我的问题类似的问题,但没有一个问题使用数组循环来插入表列和要插入的值。我对 PDO 还很陌生,所以我对如何完成这项工作有点迷茫。

我正在创建一个表单,学生可以在其中输入多项选择题的答案,并将他们的答案存储在数据库中。有 68 个问题。现在我正在对每一列和值进行硬编码,如下所示:

 $stmt = $DBH->prepare("INSERT INTO my_table (student, q1, q2, etc...) 
  VALUES (?, ?, ?, etc...) ");
$stmt->execute(array($student_name, $answer[1], $answer[2], $answer[3], 
     etc... through  $answer[68]));

这很好用,但必须有一种更简单的方法来做到这一点,而无需键入每个实例。我希望能够遍历表格列(上面的 q1 等)的数字以及答案变量数组。我只是不知道如何解决这个问题。

即使自动拥有正确数量的占位符问号 - 这可能吗?

【问题讨论】:

  • 问题出在你的数据库设计中:你不应该有 68 列包含相似的数据,你应该有一个单独的表,每个问题都有一行。
  • 您可以通过编程方式构建? 字符串;只要您完全控制要构建它的文本(在本例中为 ,?),就没有注入风险。
  • 您也可以使用? 转义列名。我不确定它的可移植性如何,但在 MySQL 中,您甚至可以在表名中使用 ?! (但不要那样做)
  • 您确定可以使用? 作为列名吗? stackoverflow.com/questions/182287/… 讨论这个。

标签: php mysql pdo


【解决方案1】:

虽然@IMSoP 在更大的点上是正确的,但在我看来,您需要的只是一个数组,其中 $student_name 后跟所有 $answer 数组。

$stmt->execute(array_merge(array($student_name), $answer)));

这样做。如果你想要一些但不是全部的 $answer,你可以使用 array_slice。

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 2023-03-10
    • 2018-05-21
    • 2016-02-02
    • 2019-11-18
    • 2016-03-27
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多