在 sql 条件 PHP 中检查数组数据



我想通过检查两个条件将seat_status更新为活动状态。

第一个条件 = bus_id

第二个条件 = seat_title

我在函数cancelbook中使用此代码。

function cancelbook($conn,$id,$busid)
{
$stmtgetseats = $conn->prepare("SELECT seat_no from tbl_seats WHERE bus_id=:bus_id");
$stmtgetseats->bindParam(':bus_id',$busid);
$stmtgetseats->execute();
$seat_no=$stmtgetseats->fetchAll();
for($i=0;$i<count($seat_no);$i++)
{
$stmtactive = $conn->prepare("UPDATE tbl_busseats SET seat_status='active' WHERE bus_id=:bus_id AND seat_title=:seat_title");
$stmtactive->bindParam('bus_id',$busid);
$stmtactive->bindParam('seat_title',$seat_no[$i]);
}
if ($stmtactive->execute()) {
exit();
return true;
}
return false;
}

我收到此错误 注意:数组到字符串的转换

你做循环的方式只会更新一行,要更新每一行,你应该为每次迭代执行你的语句。

function cancelbook($conn,$id,$busid)
{
$stmtgetseats = $conn->prepare("SELECT seat_no from tbl_seats 
WHERE bus_id=:bus_id");
$stmtgetseats->bindParam(':bus_id',$busid);
$stmtgetseats->execute();
$seat_no=$stmtgetseats->fetchAll();
foreach($seat_no as $seat) {
$stmtactive = $conn->prepare("UPDATE tbl_busseats SET seat_status='active' 
WHERE bus_id=:bus_id 
AND seat_title=:seat_title");
$stmtactive->bindParam('bus_id',$busid);
$stmtactive->bindParam('seat_title',$seat['seat_no']);
$stmtactive->execute();
}
}

似乎$seat_no[$i]不是字符串,它是一个数组,(我建议之前var_dump($seat_no[$i]);它(,我的问题是它应该是以下代码片段:

$stmtactive->bindParam('seat_title',$seat_no[$i]['seat_no']);

而不是

$stmtactive->bindParam('seat_title',$seat_no[$i]);

在你的代码中将解决你的问题。

当然,与其用于学习使用,不如使用 forfor each

但另一种性能更好的解决方案是仅使用一个更新而不是服务器更新!!

function cancelbook($conn,$id,$busid)
{
$stmtgetseats = $conn->prepare("SELECT seat_no from tbl_seats 
WHERE bus_id=:bus_id");
$stmtgetseats->bindParam(':bus_id',$busid);
$stmtgetseats->execute();
$seat_no=$stmtgetseats->fetchAll();
$seat_numbers = array_values($seat_no);
$stmtactive = $conn->prepare("UPDATE tbl_busseats SET seat_status='active' 
WHERE bus_id=:bus_id 
AND seat_title IN (:seat_title"));
$stmtactive->bindParam('bus_id',$busid);
$stmtactive->bindParam('seat_title',implode(",",$seat_numbers));
$stmtactive->execute();
}

另外,删除代码中的Exit,这是代码中的一个严重错误

最新更新