for循环中的预准备语句只执行一次

时间:2014-03-10 19:12:21

标签: php mysql sql prepared-statement

也许你们其中一个人可以在这里开始我......

我尝试使用预准备语句将表单值存储在带有php的mySQL数据库中。我已经$stmt1启动并运行以存储我的助手的信息。

现在我想存储其他信息,例如帮助者能够提供帮助的日子。我的理解是,我只准备$ stmt2一次然后使用for循环来查找参数值并执行该语句几次。

准备声明:

$stmt2 = $dbh->prepare('INSERT INTO '.$tbl_pre . $tbl_event .'
                                (helper_ID,
                                day_date,
                                needCabin)
                              VALUES
                                (:helper_ID,
                                :day_date,
                                :needCabin)');
$stmt2->bindParam(':helper_ID', $helperID);
$stmt2->bindParam(':day_date', $day_date);
$stmt2->bindParam(':needCabin', $night_ID);

然后只获取最后一个insert语句的ID,因为它对于所有即将发生的插入都是相同的。

$helperID = $dbh->lastInsertId('ID');

现在从for循环开始:

for ($i = 0; $i < 3; $i++) {

  $insert = false;
  $night_ID = 0;
  $day_date = 0;

  if ($night[$i] != null) {

    $night_ID = 1;
    $day_date = $night[$i];
    $insert = true;


  } elseif ($day[$i] != null){

    $day_date = $day[$i];
    $night_ID = 0;
    $insert = true;

  }

  if ($insert) {

    $stmt2->execute();

  }
}
}

但它在第一次迭代后才停止。如果我取走execute语句,它将运行所有三次迭代。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您的代码允许 案例不会导致插入。也就是说,如果既没有设置$ day [$ i]也不设置$ night [$ i]。

因此,测试是否有一些循环迭代在不进行插入的情况下经过:

if ($insert) {
    $stmt2->execute();
} else {
    echo "No insert executed for i=$i";
}

此外,您应该始终检查prepare()和execute()以返回 false ,这表示发生了错误。

您无需检查是否启用了PDO例外。