Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从ODBC连接获取最后一个插入id_Php_Database - Fatal编程技术网

PHP从ODBC连接获取最后一个插入id

PHP从ODBC连接获取最后一个插入id,php,database,Php,Database,如何使用ODBC连接从数据库中获取最后一个插入id 我正在寻找一个类似于mysql_insert_id()函数的解决方案。如果您在PHP中使用数据库,我强烈建议您使用PDO(许多常见数据库引擎的简单数据库包装器,一直受到越来越多的支持,是PHP canon的一部分),因此如果您的数据库支持与mysql_insert_id等效的数据库,请使用PDO 不要使用“从表中选择最大值(id)”,因为这可能会导致以后出现严重异常和难以发现的错误 ***更新:好的,您正在使用ODBC,我怀疑您在寻找。我仍然支

如何使用ODBC连接从数据库中获取最后一个插入id


我正在寻找一个类似于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。