如何从表MySQL中获取最后一个插入的id

时间:2014-01-02 21:06:04

标签: php mysql database

我在php中运行了1个脚本,因为我需要在订阅表中输入最后一个id。通过使用该ID,我想为该订阅制作通知备注。

我用过:

SELECT LAST_INSERT_ID() FROM subscription

我得到0而不是真正的最后插入值。

6 个答案:

答案 0 :(得分:10)

如果您使用php连接到mysql,则可以使用mysql_insert_id()指向上次插入的ID。

像这样:

mysql_query("INSERT INTO mytable (1, 2, 3, 'blah')");
$last_id = mysql_insert_id();

请参阅:mysql_insert_id()

答案 1 :(得分:4)

LAST_INSERT_ID()返回上一个insert语句的最后一个id。如果您想要最近插入的记录并使用自动增量Prime键,则可以使用以下代码:

SELECT MAX( id ) FROM subscription;

如果您需要了解 NEXT ID的内容,可以从INFORMATION_SCHEMA获取此内容

SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'test'

mysql_insert_id

答案 2 :(得分:3)

这个问题已经多次回答:MySQL: LAST_INSERT_ID() returns 0

您正在脱离上下文使用该功能。只有在你之前插入一行时它才会起作用:

INSERT 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

但是,如果您没有在收集最新行ID的同一脚本中插入订阅,请使用“select max”方法。鉴于您提到'1 script'

,这似乎不太可能

此外,如果您的ID不是连续的,或者您没有ID字段,或者您的行ID高于您刚刚添加的ID,那么您应该考虑使用'date_added'列确定哪一个真的是最新的。但是,这些情况不太可能发生。

答案 3 :(得分:2)

这是更好的方法2和3工作但MAX(id)需要更多时间来执行。

  1. SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'tableName';

  2. SELECT tableName.id FROM tableName ORDER BY tableName.id DESC LIMIT 0,1;

  3. SELECT MAX( id ) FROM tableName;

答案 4 :(得分:1)

这将始终为您提供最大ID,其中最大数字是最后一个插入的

 SELECT MAX(id) as MaximumID FROM subscription;

答案 5 :(得分:1)

$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替换为您的表名。