我正在运行一个 PHP 脚本,需要获取订阅表中最后一条插入的 ID。通过使用这个 ID ,我想为该订阅制作通知备注。
我使用了以下代码:
SELECT LAST_INSERT_ID() FROM subscription
我得到的是0而不是真正的最后插入的值。
php
连接到 mysql
,则可以使用 mysql_insert_id()
指向最近插入的 id。mysql_query("INSERT INTO mytable (1, 2, 3, 'blah')");
$last_id = mysql_insert_id();
LAST_INSERT_ID()
返回上一次插入语句的最后一个id。如果您想要最近插入的记录并且使用自增主键,则可以使用以下代码:
SELECT MAX( id ) FROM subscription;
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'test'
的翻译是:。MAX(id)
不一定接近自动递增将生成的下一个值,因为有人可能已经从表的末尾删除了一些行。 - Bill KarwinLAST_INSERT_ID()
返回的值比MAX(id)
还要高,如果您刚插入的行被删除了。 - Bill KarwinMAX(id)
可能返回比您刚刚插入的值更大的值。 - Bill KarwinINSERT INTO 'subscription' (name) VALUES ('John Smith');
SELECT LAST_INSERT_ID() FROM subscription
您可以选择具有最高ID的行,这在逻辑上应该是最近添加的行...
SELECT MAX( id ) FROM subscription;
然而,标准方法是简单地调用 mysqli_insert_id
或 mysql_insert_id
(取决于您是否使用 mysqli 或 mysql PHP 库。我应该补充说,mysql 库非常不建议使用,因为它几乎已经被弃用)。下面是整个过程的理想示例:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query("INSERT INTO 'subscription' (name) VALUES ('John Smith');");
printf ("New Record has id %d.\n", $mysqli->insert_id);
//Output is something like: New Record has id 999
这是更好的方法,2和3都可行,但MAX(id)需要更多时间来执行。
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'tableName';
SELECT tableName.id FROM tableName ORDER BY tableName.id DESC LIMIT 0,1;
SELECT MAX( id ) FROM tableName;
$last_id=mysql_query("SELECT id FROM `table_name` ORDER BY id DESC LIMIT 0 , 1" );
$row=mysql_fetch_assoc($last_id);
echo $row['id'];
在数据库中,将id
替换为您的ID字段名称,将table_name
替换为您的表名称。
SELECT MAX(id) as MaximumID FROM subscription;
MAX(id)
不一定会返回由您的会话生成的最后一个值。 - Bill Karwinauto_increment
,那么您的方法也会失败。 - halfpastfour.am
LAST_INSERT_ID()
是连接特定的。确保在查询之间不要关闭连接并打开新连接,或尝试从单独的脚本调用此函数。 - Sammitch