Retrieve id of each INSERT statement in multi query

前端 未结 5 1597
闹比i
闹比i 2020-12-12 01:47

Is it possible to retrieve id (ua_id is in my case) for each INSERT statement in following SQL request

INSERT INTO users_addresses (ua_user_id, ua_address_id         


        
相关标签:
5条回答
  • 2020-12-12 02:00

    In MySQL you can use LAST_INSERT_ID() function. You need to use this function each time - after INSERT statement. It gets ID for the last inserted record.

    MySQL documentation - LAST_INSERT_ID()

    0 讨论(0)
  • 2020-12-12 02:03

    Well. you do a multiquery, let's use it:

    <?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());
    
    0 讨论(0)
  • 2020-12-12 02:03

    Do you mean lastInsertId?

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

    hope it helps!

    0 讨论(0)
  • 2020-12-12 02:08

    Yes. Use $mysqli->insert_id - see working example below.

    $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());
    }
    

    Use built in mysqli::$insert_id - documentation: http://php.net/manual/en/mysqli.insert-id.php

    0 讨论(0)
  • 2020-12-12 02:14

    mysqli->insert_id will return the ID of the first row inserted if you insert in the same table you then know that the next row inserted is the first row insert_id + 1...

    If you work with many tables at once you then need to scroll back your results then you need to create another query using :

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

    Now I don't know what is better (single insert query or multi query)...

    0 讨论(0)
提交回复
热议问题