微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MySqli 准备好的语句 PHP 中连接查询

如何解决在 MySqli 准备好的语句 PHP 中连接查询

我有一个项目列表,我想插入包含 INSERT 查询的表中。 我正在使用 MysqLPHP

我收到带有 POST 的练习名称列表(用逗号分隔),并希望将它们保存在数据库中,将它们关联到一个 ID(我也从 POST 中收到)。

我想准备一个唯一的查询并只运行一次,而不是运行多个 INSERT 查询,以便整个查询运行或失败。

这是我的代码

$exList= $_REQUEST['exList']; 
$routineID = $_REQUEST['routineID'];
$arrayEx = explode(',',$exList);
$countEx=count($arrayEx);
$placeholdersEx = implode(',array_fill(0,$countEx,'?'));
$bindStrEx = str_repeat('si',$countEx);
$queryEx = str_repeat('INSERT INTO exercises_x_routines(exerciseID,routineID) VALUES(?,?);',$countEx);
$arrayRoutine = array_fill(0,$routineID);

$stmt = MysqLi_prepare($con,substr($queryEx,-1));
MysqLi_stmt_bind_param($stmt,$bindStrEx,...$arrayEx,...$arrayRoutine));

if (!MysqLi_stmt_execute($stmt))
    {
        //print MysqLi_error($con);
        $output[]=array("code" => 3003,"error" => MysqLi_error($con));
        print(json_encode($output));
        MysqLi_close($con);
        exit;
    }

但是,我不知道为什么但是查询执行不成功并且我没有从 MysqLi_error 得到任何错误描述。

解决方法

您不能准备多个查询。相反,您可以准备一次查询并执行多次:

{!frange l=0.0 u=10000.0}sub(field(payment_double_mv,max),product(field(payment_double_mv,min),min(sub(field(price_double),2500),min(max(0.000000,field(deposit_double_mv,min)),max)))))

如果您想有效地使其成为单个插入,并且在任何插入失败时不更改表,您可以使用事务:

$exList= $_REQUEST['exList']; 
$routineID = $_REQUEST['routineID'];
$arrayEx = explode(',',$exList);

$queryEx = 'INSERT INTO exercises_x_routines(exerciseID,routineID) VALUES(?,?)';
$stmt = $con->prepare($queryEx);
$stmt->bind_param('si',$ex,$routineID);
foreach ($arrayEx as $ex) {
    if (!$stmt->execute()) {
        $output[]=array("code" => 3003,"error" => $con->error);
        print(json_encode($output));
        $con->close();
        exit;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。