在多个查询中检索每个INSERT语句的id

时间:2012-12-12 20:38:43

标签: php mysql

是否可以在以下SQL请求中为每个INSERT语句检索id(在我的情况下为ua_id)

INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,1);
INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,2);
INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,3);

使用mysqli::multi_query()来执行它,而ua_id是AUTO_INCREMENT主键吗?

5 个答案:

答案 0 :(得分:3)

在MySQL中,您可以使用 LAST_INSERT_ID()功能。每次都需要使用此函数 - 在INSERT语句之后。它获取最后插入记录的ID。

MySQL文档 - LAST_INSERT_ID()

答案 1 :(得分:1)

好。你做多分数,让我们用它:

<?php
$db->multi_query('
INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,1);
SELECT LAST_INSERT_ID();
INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,2);
SELECT LAST_INSERT_ID();
INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,3);
SELECT LAST_INSERT_ID()') or trigger_error($db->error);
do {
   if ($result = $db->store_result()) {
      while ($row = $result->fetch_row()) {
          var_dump($row);
      }
   }
} while ($db->next_result());

答案 2 :(得分:0)

你的意思是lastInsertId吗?

http://cl1.php.net/manual/en/mysqli.insert-id.php

希望它有所帮助!

答案 3 :(得分:0)

mysqli-&gt; insert_id将返回插入的第一行的ID,如果您在同一个表中插入,则您知道插入的下一行是第一行insert_id + 1 ...

如果您同时使用多个表,则需要向后滚动结果,然后需要使用以下命令创建另一个查询:

SELECT MAX(id) FROM table-a WHERE 1
...
SELECT MAX(id) FROM table-n WHERE 1

现在我不知道什么是更好的(单插入查询或多查询)......

答案 4 :(得分:0)

是。使用$mysqli->insert_id - 请参阅下面的工作示例。

$mysqli = new mysqli(host, user, pass, db);

$query  = "INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,1); ";
$query .= "INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,2); ";
$query .= "INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES (1,3); ";

if ($mysqli->multi_query($query)) {
    do {
        /* Returns the auto generated id used in the last query */
        printf("%d\n", $mysqli->insert_id);
        /* Check if loop should continue */
        if ($mysqli->more_results() === FALSE) break;
    } while ($mysqli->next_result());
}

使用内置的mysqli :: $ insert_id - 文档:http://php.net/manual/en/mysqli.insert-id.php