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

在sql条件PHP中检查数组数据,php,sql,Php,Sql,我想通过检查两个条件将座椅\ U状态更新为active(激活) 第一个条件=总线id 第二个条件=座位名称 我正在函数cancelbook中使用此代码 function cancelbook($conn,$id,$busid) { $stmtgetseats = $conn->prepare("SELECT seat_no from tbl_seats WHERE bus_id=:bus_id"); $stmtgetseats->bindParam

我想通过检查两个条件将
座椅\ U状态更新为active(激活)

第一个条件=总线id

第二个条件=座位名称

我正在函数
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;
}
函数cancelbook($conn、$id、$busid)
{
$stmtgetseats=$conn->prepare(“从tbl_seats中选择座位号,其中总线id=:总线id”);
$stmtgetseats->bindParam(':bus_id',$busid);
$stmtgetseats->execute();
$seat_no=$stmtgetseats->fetchAll();
对于($i=0;$i准备(“更新tbl_-busseats SET-seat_-status='active',其中总线id=:总线id和座椅标题=:座椅标题”);
$stmtactive->bindParam('bus_id',$busid);
$stmtactive->bindParam($seat_title',$seat_no[$i]);
}
如果($stmtracive->execute()){
退出();
返回true;
}
返回false;
}
我得到这个错误
注意:数组到字符串的转换

似乎
$seat\u no[$i]
不是字符串,它是一个数组,(我建议
var\u dump($seat\u no[$i]);
之前使用它),我的问题是它应该是以下代码片段中的内容:

使用

$stmtactive->bindParam('seat\u title',$seat\u no[$i]['seat\u no']);

而不是

$stmtactive->bindParam('seat_title',$seat_no[$i]);
在您的代码中将解决您的问题

当然,最好不要使用for学习使用foreach

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

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,这是代码中的一个严重错误

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

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();
    }
}

最后一个if语句看起来不正确!,
exit()
将终止脚本执行,您的意思是
if($stmtactive->execute())返回true;返回false;
在哪一行?请提供退出的完整通知以检查错误错误该错误来自绑定座位标题的行,这意味着
$seat\u no[$i]
不是字符串而是数组,您可以执行
变量转储($seat\u no)吗;
我需要检查从该数组到string@SoonangRai我的意思是你只需要这一行,为什么我要重写你的全部代码?我在另一个答案之前回答了这个问题,但你将其标记为答案!!!!为什么?解决方案是一样的如果你需要跟踪成功更新和失败的数量,我将更新ans你的解决方案和我的有什么不同?阅读OP的问题和我的答案,我相信你会找到答案:)