我有 MySQL 表,主键为 AUTO_INCREAMENTED (UNSIGNED INT) 作为序列号。每次我在此表中插入新行时,我都想确认显示插入的 AUTO_INCREAMENTED UNSIGNED INT 的用户。
目前在插入行后,我正在执行 SELECT Query 以获取最后插入的行。在 INSERT ( 不带 SELECT ) 之后立即获取插入值是否有更聪明的方法?
我有 MySQL 表,主键为 AUTO_INCREAMENTED (UNSIGNED INT) 作为序列号。每次我在此表中插入新行时,我都想确认显示插入的 AUTO_INCREAMENTED UNSIGNED INT 的用户。
目前在插入行后,我正在执行 SELECT Query 以获取最后插入的行。在 INSERT ( 不带 SELECT ) 之后立即获取插入值是否有更聪明的方法?
尝试mysql_insert_id()
echo mysql_insert_id();
有关更多信息,请参阅此mysql_insert_id()
并且尽量避免mysql_*
声明,因为整个ext/mysql PHP
扩展提供了所有以前缀命名的函数mysql_*
,从 开始正式弃用,PHP v5.5.0
并将在未来删除。
您可以更好地使用其他两个MySQL
扩展:MySQLi
和PDO_MySQL
,其中任何一个都可以用来代替ext/mysql
.
在mysqli_*
它会像
echo mysqli_insert_id();
MySQL 参考手册中有一个函数LAST_INSERT_ID()可用于此目的。
mysql> CREATE TABLE t1 (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(32));
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT INTO t1(name) VALUES ("John Doe");
Query OK, 1 row affected (0.24 sec)
mysql> SELECT * FROM t1;
+----+----------+
| id | name |
+----+----------+
| 1 | John Doe |
+----+----------+
1 row in set (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)