PHP / mysql:mysqli prepared语句在for循环中多次插入相同的值

时间:2014-06-04 04:19:11

标签: php mysql sql mysqli prepared-statement

我正在使用预准备语句使用for循环将多行插入表中。我需要的是将相同的值($id)插入到" id"的所有行中。柱。同样,时间戳应插入"提交的#34;所有迭代的列。

我当前的代码只插入一列。这是代码:

 if($stmt = $link->prepare("INSERT INTO table (id, alt_ord, alt_id, rank, submitted) VALUES ($id,?,?,?, NOW())")){
      $stmt->bind_param('iii', $q_ord, $q_ID, $rating);

      for($i=0; $i < count($_POST['alt_ord']); $i++){
           $q_ord = $_POST['alt_ord'][$i];
           $q_ID = $_POST['alt_id'][$i];
           $rating = $_POST['rank_'][$i];
           $stmt->execute();
      }
      $stmt->close();
 }

$id声明中使用?NOW()INSERT的组合显然是不正确的。如何按预期重复插入中的ID和时间戳值?

1 个答案:

答案 0 :(得分:1)

假设$id是未知值(来自用户输入等),只需将其与其他人绑定即可,并且不要忘记检查错误

// make mysqli trigger useful errors (exceptions)
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$stmt = $link->prepare('INSERT INTO table (id, alt_ord, alt_id, rank, submitted) VALUES (?, ?, ?, ?, NOW())');
$stmt->bind_param('iiii', $id, $q_ord, $q_ID, $rating);

for ($i = 0; $i < count($_POST['alt_ord']); $i++) {
    $q_ord = $_POST['alt_ord'][$i];
    $q_ID = $_POST['alt_id'][$i];
    $rating = $_POST['rank_'][$i]; // you sure about this one? "rank_"?

    $stmt->execute();
}