2

次の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 主キーですか?

4

5 に答える 5

3

MySQL では、LAST_INSERT_ID()関数を使用できます。INSERT ステートメントの後、毎回この関数を使用する必要があります。最後に挿入されたレコードの ID を取得します。

MySQL ドキュメント - LAST_INSERT_ID()

于 2012-12-12T20:49:36.747 に答える
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());
于 2012-12-12T21:31:01.577 に答える
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

于 2016-10-09T16:15:36.990 に答える
0

lastInsertId のことですか?

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

それが役に立てば幸い!

于 2012-12-12T20:45:26.787 に答える
0

mysqli->insert_id は、挿入された最初の行の ID を返します。同じテーブルに挿入すると、次に挿入される行が最初の行 insert_id + 1 であることがわかります...

一度に多くのテーブルを操作する場合、結果をスクロールして戻す必要がある場合は、次を使用して別のクエリを作成する必要があります。

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

何が良いのかわかりません(単一の挿入クエリまたは複数のクエリ)...

于 2012-12-12T20:49:21.917 に答える