PHP从ODBC连接获取最后一个插入id
如何使用ODBC连接从数据库中获取最后一个插入idPHP从ODBC连接获取最后一个插入id,php,database,Php,Database,如何使用ODBC连接从数据库中获取最后一个插入id 我正在寻找一个类似于mysql_insert_id()函数的解决方案。如果您在PHP中使用数据库,我强烈建议您使用PDO(许多常见数据库引擎的简单数据库包装器,一直受到越来越多的支持,是PHP canon的一部分),因此如果您的数据库支持与mysql_insert_id等效的数据库,请使用PDO 不要使用“从表中选择最大值(id)”,因为这可能会导致以后出现严重异常和难以发现的错误 ***更新:好的,您正在使用ODBC,我怀疑您在寻找。我仍然支
我正在寻找一个类似于mysql_insert_id()函数的解决方案。如果您在PHP中使用数据库,我强烈建议您使用PDO(许多常见数据库引擎的简单数据库包装器,一直受到越来越多的支持,是PHP canon的一部分),因此如果您的数据库支持与mysql_insert_id等效的数据库,请使用PDO 不要使用“从表中选择最大值(id)”,因为这可能会导致以后出现严重异常和难以发现的错误
***更新:好的,您正在使用ODBC,我怀疑您在寻找。我仍然支持强烈建议使用PDO,因为它有一个ODBC驱动程序。(在我眼中,ODBC是一个脾气暴躁、脾气暴躁的老人,他开着一辆快要散架的卡车,嘴里咕哝着,因为时髦而高效的PDO家伙们穿着性感的沃尔沃S90跑了过去)这取决于数据库类型,但看看rdbm的序列语法。你是通过PHP将行插入数据库吗?如果是这样,也许您可以使用uniqid()生成一个唯一的主键,这样您就可以知道ID,而不必查询数据库 如果无法更新密钥类型,则在执行插入操作时,可能仍然可以插入唯一的id,因此可以执行如下查询:
SELECT id FROM mytable WHERE rowid = '$myuniqueid'
这样,您就可以确保从数据库中提取正确的ID,这是一个比MAX(ID)更好的解决方案
SELECT max(id) FROM table;
从事务内部看应该没有问题,或者ODBC不支持事务?选择@@IDENTITY AS ID如果ODBC下有MySQL,则可以使用下一个查询:
"SELECT LAST_INSERT_ID( );"
它必须在执行INSERT查询后立即执行
对于其他数据库-使用其他特定查询 在使用PHP/MSSQL时,我通过ODBC使用了“选择@@IDENTITY作为LastID”。这给SQLServer2005Server带来了一些问题(或者是2000年?)。
无论哪种方式,如果您喜欢:
SELECT id FROM mytable WHERE rowid = '$myuniqueid'
在上设置无计数
[现在插入您的插入SQL查询]
选择@@IDENTITY作为LastID
在任何MSSQL服务器版本中,您都应该很好
“设置NOCOUNT ON”将阻止sql server发送“插入1行”之类的消息,这将使脚本正常工作。在MySQL中使用
SELECT *
FROM table_name
ORDER BY Id Desc
LIMIT 1
在SQL Server中使用
SELECT top 1 *
FROM table_name
ORDER BY Id Desc
您正在使用哪个数据库?它们有不同的方法来检索插入行的id。那么这个新数据库是什么呢?它不是一个新数据库。。缓存数据库在ODBC下使用,您的问题可以反映您的评论。你现在应该得到更好的答案了。:)+1在这个答案上几乎100%正确,除了沃尔沃S40s;)。PDO ODBC驱动程序不支持lastInsertID()。如上所述:“此方法可能不会在不同PDO驱动程序之间返回有意义或一致的结果”。因此,推荐PDO无助于回答OP的问题。请记住,ID并不总是自动递增的。如果我们删除一行,那么下一个插入行的ID将更小,也可能存在这样的系统。此外,正如您所提到的,这仅在事务内部起作用。根据ID列类型,可能不起作用。如果它是一个Guid。