gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:04:52 24 4
gpt4 key购买 nike

也许你们中的一个可以在这里快速启动我......

我尝试使用准备好的语句将表单值存储在带有 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);

然后只获取最后一次插入语句的 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 语句,它将运行所有三个迭代。

我错过了什么?

最佳答案

您的代码允许两种情况 都不会导致插入的可能性。也就是说,如果既没有设置 $day[$i] 也没有设置 $night[$i]。

所以测试一下是否有一些循环迭代在没有执行插入的情况下通过:

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

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

您不必检查是否启用 PDO 异常。

关于php - for 循环中的准备语句只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com