Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用MYSQL LAST_INSERT_ID()检索插入行的ID?_Php_Mysql_Select_Lastinsertid - Fatal编程技术网

Php 使用MYSQL LAST_INSERT_ID()检索插入行的ID?

Php 使用MYSQL LAST_INSERT_ID()检索插入行的ID?,php,mysql,select,lastinsertid,Php,Mysql,Select,Lastinsertid,我有一个表,它有一个列,带有自动递增。插入新行时,我必须检索此列的值(我需要新行的值)。我读了很多关于它的书,发现了不同的解决方案,一种是使用选择LAST\u INSERT\u ID()。关于这件事我听过很多不同的说法。我能不能用这个?我担心另一个连接可能会在我调用SELECT LAST\u insert\u ID()之前插入新行,从而获取错误的ID 总之,使用SELECT LAST\u INSERT\u ID()安全吗?如果没有,我如何以安全的方式检索最后插入的id?如果表的最后一个id对您至

我有一个表,它有一个列,带有
自动递增
。插入新行时,我必须检索此列的值(我需要新行的值)。我读了很多关于它的书,发现了不同的解决方案,一种是使用
选择LAST\u INSERT\u ID()
。关于这件事我听过很多不同的说法。我能不能用这个?我担心另一个连接可能会在我调用
SELECT LAST\u insert\u ID()
之前插入新行,从而获取错误的ID


总之,使用
SELECT LAST\u INSERT\u ID()
安全吗?如果没有,我如何以安全的方式检索最后插入的id?

如果表的最后一个id对您至关重要,您可以锁定表进行写入,然后使
从表名中选择MAX(id),然后解锁表。

我认为您不必担心这里提到的情况。

从Mysql文档中:
生成的ID在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机的
AUTO\u INCREMENT
列的最新语句生成的第一个
AUTO\u INCREMENT
值。此值不受其他客户端的影响,即使它们生成自己的
AUTO_INCREMENT
值。此行为确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,也不需要锁或事务

有关详细信息,请参阅


尽管如此,如果其他人有不同的意见,我还是愿意阅读他们的意见。

生成的ID是基于每个连接的,因此您不应该有任何问题!帖子更详细。

是的,根据官方文件,它是安全的:

生成的ID在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机自动增量列的最新语句生成的第一个自动增量值。此值不受其他客户端的影响,即使它们生成自己的自动增量值。此行为确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,也不需要锁或事务


摘自:

如果您正在使用PDO,请使用
PDO::lastInsertId。

如果您使用的是mysql,请使用
mysqli::$insert\u id.

是的,使用
AI是安全的

不要直接使用select语句,而是尝试使用
preparedStatement.


您还可以使用

Last insert id返回为当前连接生成的最后一个id。无需担心其他连接。请参阅:如果您有自动连接池,则可以在其他连接中运行另一个调用。如果你没有,你是安全的。什么是自动连接池?我在mysqli中使用PHP。发现我可以直接调用mysqli->last\u id。