Mysql_query不会将id复制到另一行

时间:2018-03-06 18:25:40

标签: php mysql mysqli

我有一个INSERT查询将id的值复制到名为sortingId的另一行,这样可以正常工作。

当我尝试将id直接复制到sortedId中时,它也可以在phpmyadmin中使用。

但是在下面的代码中加入了它,它不起作用。没有错误,但sortingId只是0。

如果我将$sql2更改为“asdjh”它没有得到错误,那么看起来第二个mysql_query被忽略并且从未被执行

$sql1 = "INSERT INTO items (name) VALUES (\'TEC TEST !"#!12\');";
$sql2 = "SELECT @last_id := MAX(id) FROM items; UPDATE items SET sortingId = id WHERE id = @last_id;";

$sql = mysqli_query($this->db, $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);
}

更新 - 在tadman的大力帮助下:

必须通过删除“;”来分隔mysqli查询并对每一行进行查询:

$sql1 = "INSERT INTO items (name) VALUES (\'TEC TEST !"#!12\')";
$sql2 = "SELECT @last_id := MAX(id) FROM items";
$sql3 = "UPDATE items SET sortingId = id WHERE id = @last_id";

$sql = mysqli_query($this->db, $sql1);

if(mysqli_insert_id($this->db) > 0){
    $responsedId = mysqli_insert_id($this->db);
    $sql = mysqli_query($this->db, $sql2);
    $sql = mysqli_query($this->db, $sql3);      
    $this->response($this->json(array( 'inserted_id' => $responsedId)), 200);
}

1 个答案:

答案 0 :(得分:0)

首先,您在第一个示例中有一个可以修复的转义/引用问题:

$stmt = $this->db->prepare("INSERT INTO items (name) VALUES (?)");
$stmt->bind_param("s", "TEC TEST !\"#!12");
$stmt->execute();

bind_param函数使得插入任意数据变得非常容易,而不必担心转义问题,并且作为奖励可以安全地插入用户提供的数据,而不会有SQL注入的风险。 / p>

这里最大的问题是尝试将两个查询强制转换为一个query调用:

$sql2 = "SELECT @last_id := MAX(id) FROM items; UPDATE items SET sortingId = id WHERE id = @last_id;";

$sql = mysqli_query($this->db, $sql2);

;分隔符仅供交互式客户端使用,例如mysql命令行工具或流行的前端。 mysqli驱动程序不会为您执行此操作,而是需要将其拆分:

$res1 = $this->db->query("SELECT @last_id := MAX(id) FROM items");
$res2 = $this->db->query("UPDATE items SET sortingId = id WHERE id = @last_id");

在那里,我已经应用了一些有关如何更有效地使用mysqli的建议。

最后要注意的是PDO使用起来会更加愉快,所以如果你刚刚开始考虑这种方法。它不是特定于MySQL的,所以如果你使用另一个数据库后端,你花在学习它上面的时间不会被浪费。

相关问题