当我插入一行时,表的“id”字段会自动增加。我想插入一行然后获取该 ID。
我会按照我说的去做,但是有没有一种方法可以让我不用担心插入行和获取 id 之间的时间?
我知道我可以在数据库中查询与输入的信息相匹配的行,但是变化很大,会有重复项,唯一的区别是 ID。
最佳答案
$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);
无论你做什么,都不要插入然后执行“SELECT MAX(id) FROM mytable
”。就像你说的,这是一个竞争条件,没有必要。 mysqli_insert_id()
已经具有此功能。
另一种方法是一次性运行两个查询,并使用 MySQL
的 LAST_INSERT_ID()
方法,其中两个表都会同时修改(PHP 也这样做)不需要任何 ID),例如:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Note that Each connection keeps track of ID separately (so, conflicts are prevented already).
关于PHP/MySQL 插入行然后得到 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409550/