是否可以在以下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主键吗?
答案 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吗?
希望它有所帮助!答案 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