php - PHP/MySQL 插入行然后获取'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);



请参见 mysqli_insert_id()

无论你做什么,不要插入,然后做" SELECT MAX(id) FROM mytable "就像你说的那样,这是一种竞争条件,没有必要。 mysqli_insert_id() 已经具有这里功能。

MySQL函数 LAST_INSERT_ID() 只做你所需要的: 它检索在会话期间插入的id 。 因此,即使在同一表中有其他进程( 其他人调用完全相同的脚本,例如) 插入值,也可以安全地使用。

PHP函数 mysql_insert_id() 与使用 mysql_query() 调用 SELECT LAST_INSERT_ID() 一样。

对于php网站,mysql_insert_id现在已经过时了,我们必须使用 PDO 。 要使用PDO执行这里操作,请按如下步骤操作:


$db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass');


$statement = $db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)');


$statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') );



echo $db->lastInsertId();



...