也许你们其中一个人可以在这里开始我......
我尝试使用预准备语句将表单值存储在带有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语句,它将运行所有三次迭代。
我错过了什么?
答案 0 :(得分:0)
您的代码允许 案例不会导致插入。也就是说,如果既没有设置$ day [$ i]也不设置$ night [$ i]。
因此,测试是否有一些循环迭代在不进行插入的情况下经过:
if ($insert) {
$stmt2->execute();
} else {
echo "No insert executed for i=$i";
}
此外,您应该始终检查prepare()和execute()以返回 false ,这表示发生了错误。
您无需检查是否启用了PDO例外。