MySqli语句PHP中的连接查询
我有一个要插入到表中的项目列表,其中包含一系列插入查询。 我正在使用MySQL和PHP 我收到带有POST(用逗号分隔)的练习名列表,并希望将它们保存在DB中,将它们与ID关联(我也从POST收到) 我不想运行几个INSERT查询,而是准备一个唯一的查询并只运行一次,这样整个查询就会运行或失败 这是我的密码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
$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();
Withstr\u repeat()
看起来您正试图将多个INSERT
语句构建到一个字符串中mysqli\u stmt\u execute()
将不允许这样做-一次只能执行一条语句。检查mysqli_错误($con)就在mysqli_prepare()
之后-我认为在尝试执行之前,它应该在prepare中发出一个错误。@user1922860,很清楚,可以使用一个prepared语句和一次执行批插入多行。@mickmackusa,这将是对问题的一个完全有效的回答。我确信此页面是重复的,因此回答不合适。@mickmackusa请随意花时间查找一个…@user1922860请参阅我的编辑,它将所有插入内容包装到一个事务中,如果任何插入失败,可以回滚,如果所有插入都成功,则可以提交。