我有一个代码可以执行此查询并按预期工作:
INSERT INTO items (name) VALUES (\'TEC TEST !"#!12\')
但是当我将此行添加到其末尾时,它失败了:
; SELECT @last_id := MAX(id) FROM ".$table_name."; UPDATE ".$table_name." SET sortingId = id WHERE id = @last_id;
我在 google 和 stackoverflow 上进行了搜索,但找不到任何符合我的问题的案例:(
我的php调用代码是:
$table_name = $this->_request['table'];
$data = $this->_request['data'];
$sql0 = "INSERT INTO ".$table_name." (";
$sql1 = " VALUES (";
foreach($data as $key=>$value){
$sql0 .= $key.",";
if(is_array($value)) {
if($value[1] == 'date')
$sql1 .= $this->db_escape($value[0]).",";
if($value[1] == 'float')
$sql1 .= $value.",";
}else
$sql1 .= $this->db_escape($value).",";
}
$sql0 = substr($sql0, 0, -1).")";
$sql1 = substr($sql1, 0, -1).")";
$sql2 = "SELECT @last_id := MAX(id) FROM items; UPDATE items SET sortingId = id WHERE id = @last_id;";
$string = stripslashes($sql0.$sql1.$sql2);
$sql = mysqli_query($this->db, $sql0.$sql1.$sql2);
if(mysqli_insert_id($this->db) > 0){
$this->response($this->json(array( 'inserted_id' => mysqli_insert_id($this->db))), 200);
}
$error = array('status' => "Failed", "msg" => "Failed To Insert ".$string);
$this->response($this->json($error), 400);
更新:
这样的调用完成时没有错误,但新创建的行上的 sortingId 为 0。它应该是由 auto_increment 生成的 id 的 Int
$sql = mysqli_query($this->db, $sql0.$sql1);
$sql = mysqli_query($this->db, $sql2);
if(mysqli_insert_id($this->db) > 0){
$this->response($this->json(array( 'inserted_id' => mysqli_insert_id($this->db))), 200);
}
最佳答案
您不能使用 mysqli_query 进行多重查询,最好始终分隔查询。
如果你实在无能为力,PHP 中有这个函数:
mysqli_multiquery(...)
关于php - 添加将 id 复制到另一行的行时出现 Mysql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131559/