我想通过检查两个条件将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,这是代码中的一个严重错误