从ODBC连接中获取PHP的最后插入ID

7

如何使用ODBC连接从数据库获取最后插入的ID?

我正在寻找类似于mysql_insert_id()函数的解决方案。


1
你使用的是哪个数据库?它们有不同的方法来返回插入行的ID。 - Jimmie R. Houts
那么这个新数据库是什么? - Paolo Bergantino
这不是一个新的数据库... 这里使用的是ODBC连接下的缓存数据库。 - praveenjayapal
我已根据您的评论编辑了您的问题。现在您应该能得到更好的答案了。 :) - epochwolf
8个回答

4

选择 @@IDENTITY 作为 ID


3
如果您在使用PHP时需要使用数据库,我强烈推荐使用PDO(一个针对许多常见数据库引擎的简单数据库封装器,越来越受支持,是PHP标准库的一部分),并且在数据库支持类似于mysql_insert_id的等效功能时,请使用PDO::lastInsertId
不要使用"SELECT max(id) FROM table;",因为它可能会导致以后产生非常奇怪和难以找到的错误。
**更新:好的,您正在使用ODBC,我猜您需要odbc_cursor。我仍然坚持强烈建议使用PDO,因为它有一个ODBC驱动程序。(在我的眼里,ODBC就像一个脾气暴躁、嘟囔着开着快要散架的卡车行驶的老人,而时髦高效的PDO团队则驾驶他们性感的VOLVO S90飞驰而过)

1
+1 几乎完全正确,除了它是沃尔沃S40 ;)。 - Fenton
4
PDO ODBC驱动程序不支持lastInsertID()函数。根据文档所述:“此方法在不同的PDO驱动程序中可能无法返回有意义或一致的结果”。因此,推荐使用PDO不能帮助回答提问者的问题。 - mtmacdonald

0

在MySQL中使用

SELECT *
FROM table_name
ORDER BY Id Desc
LIMIT 1

在 SQL Server 中使用

SELECT top 1 *
FROM table_name
ORDER BY Id Desc

1
根据Id列的类型可能无法正常工作。例如:如果它是Guid类型。 - Mickael Bergeron Néron

0
如果您在ODBC下使用MySQL,则可以使用以下查询:
"SELECT LAST_INSERT_ID( );"

在执行INSERT查询之后,必须立即执行它。

对于其他数据库,请使用其他特定的查询...


0

在使用 PHP/MSSQL 时,通过 ODBC 我使用了 "SELECT @@IDENTITY AS LastID",这在 SQL 2005 服务器(或者是 2000?)下会带来一些问题。无论哪种情况,如果你按照以下方式操作:

SET NOCOUNT ON
[NOW INSERT YOUR INSERT SQL QUERY]
SELECT @@IDENTITY AS LastID

在任何的 MSSQL 服务器版本下都应该可以正常工作。

"SET NOCOUNT ON" 将防止 SQL Server 发送诸如 "1 行已插入" 的消息,这将使您的脚本正常工作。


0

这取决于数据库类型,但是请查看您的关系型数据库管理系统中的SEQUENCE语法。


-2
你是否通过PHP向数据库插入行?如果是这样,也许你可以使用uniqid()生成一个唯一的主键 - 这样你就可以知道ID而不必查询数据库。
如果无法更新键类型,也许在插入时仍然可以插入一个唯一的ID,这样你就可以执行像这样的查询:
SELECT id FROM mytable WHERE rowid = '$myuniqueid'

这样做可以确保从数据库中检索到正确的ID,比使用MAX(id)更好的解决方案。


-3
使用。
SELECT max(id) FROM table;

在事务内部应该没问题,或者ODBC不支持事务吗?


请记住,ID 并非总是自动递增的。在某些情况下,如果我们删除一行,则插入下一行将具有较小的 ID。另外,正如您所提到的,这仅适用于事务内部。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接