Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySqli语句PHP中的连接查询_Php_Mysql_Mysqli_Bindparam - Fatal编程技术网

MySqli语句PHP中的连接查询

MySqli语句PHP中的连接查询,php,mysql,mysqli,bindparam,Php,Mysql,Mysqli,Bindparam,我有一个要插入到表中的项目列表,其中包含一系列插入查询。 我正在使用MySQL和PHP 我收到带有POST(用逗号分隔)的练习名列表,并希望将它们保存在DB中,将它们与ID关联(我也从POST收到) 我不想运行几个INSERT查询,而是准备一个唯一的查询并只运行一次,这样整个查询就会运行或失败 这是我的密码 $exList= $_REQUEST['exList']; $routineID = $_REQUEST['routineID']; $arrayEx = explode(',', $ex

我有一个要插入到表中的项目列表,其中包含一系列插入查询。 我正在使用MySQL和PHP

我收到带有POST(用逗号分隔)的练习名列表,并希望将它们保存在DB中,将它们与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,$countEx,$routineID);

$stmt = mysqli_prepare($con, substr($queryEx, 0, -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获得任何错误描述。

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

$exList=$\u请求['exList'];
$routineID=$_请求['routineID'];
$arrayEx=分解(“,”,$exList);
$queryEx='插入练习x_例程(练习ID,例程ID)值(?,)';
$stmt=$con->prepare($queryEx);
$stmt->bind_参数('si',$ex,$routineID);
外汇($arrayEx作为$ex){
如果(!$stmt->execute()){
$output[]=array(“代码”=>3003,“错误”=>$con->error);
打印(json_编码($output));
$con->close();
出口
}
}
如果要在任何插入失败时有效地使其成为单个插入而不更改表,可以使用事务:

$con->beginTransaction();
外汇($arrayEx作为$ex){
如果(!$stmt->execute()){
$output[]=array(“代码”=>3003,“错误”=>$con->error);
打印(json_编码($output));
$con->rollBack();
$con->close();
出口
}
}
$con->commit();

With
str\u repeat()
看起来您正试图将多个
INSERT
语句构建到一个字符串中
mysqli\u stmt\u execute()
将不允许这样做-一次只能执行一条语句。检查mysqli_错误($con)就在
mysqli_prepare()
之后-我认为在尝试执行之前,它应该在prepare中发出一个错误。@user1922860,很清楚,可以使用一个prepared语句和一次执行批插入多行。@mickmackusa,这将是对问题的一个完全有效的回答。我确信此页面是重复的,因此回答不合适。@mickmackusa请随意花时间查找一个…@user1922860请参阅我的编辑,它将所有插入内容包装到一个事务中,如果任何插入失败,可以回滚,如果所有插入都成功,则可以提交。