2009-04-23 81 views
7

如何使用ODBC連接從數據庫獲取最後一個插入標識?PHP從ODBC連接中獲取最後一個插入標識

我正在尋找類似於mysql_insert_id()函數的解決方案。

+1

的數據庫您使用的?他們有不同的方法來回應插入行的ID。 – 2009-04-23 13:31:14

+0

那麼,這是什麼新的數據庫....? – 2009-04-23 13:31:20

+0

它不是一個新的數據庫。在ODBC連接下使用緩存數據庫 – praveenjayapal 2009-04-23 13:33:36

回答

3

如果您使用的是PHP數據庫,我強烈建議使用PDO(簡單的數據庫包裝器,適用於大量常見數據庫引擎,越來越多的支持,PHP canon的一部分),因此如果您的數據庫使用PDO::lastInsertId支持相當於mysql_insert_id。

請勿使用「SELECT max(id)FROM table;」因爲它可能會導致以後出現嚴重的奇怪和難以發現的錯誤。

* ** UPDATE:好的,您使用的是ODBC,並且我懷疑您是在odbc_cursor之後。我仍然堅守使用PDO的強烈建議,因爲它有一個ODBC驅動程序。 (我眼中的ODBC是一個脾氣暴躁的老人,他的呼吸在駕駛着他的卡車正在分崩離析,因爲臀部和有效的PDO傢伙在他們性感的VOLVO S90上跑過去了)

0

它取決於數據庫類型,但查看你的rdbm的SEQUENCE語法。

0

您是否將行通過PHP插入數據庫?如果是這樣,也許你可以使用uniqid()生成一個唯一的主鍵 - 那麼你將知道該ID而不必查詢數據庫。

如果無法更新密鑰類型,也許你仍然可以插入一個唯一的ID,當你做的插入,這樣你就可以做這樣的查詢:

SELECT id FROM mytable WHERE rowid = '$myuniqueid' 

這樣你確保您從數據庫中撤回正確的ID - 這是一個比MAX(id)更好的解決方案。

-3

使用

SELECT max(id) FROM table; 

應該從事務內部罰款,或不ODBC不支持事務?

3

SELECT @@ IDENTITY AS標識

0

如果你有MySQL的ODBC下 - 你可以使用一個查詢:

"SELECT LAST_INSERT_ID();" 

它具有執行INSERT查詢後要mmediately執行。

對於其他數據庫 - 使用其他特定的查詢...

0

我用 「SELECT @@ IDENTITY AS LastID」,用PHP/MSSQL工作時,通過ODBC。這在SQL 2005服務器(或者是2000?)下帶來了一些問題。 無論哪種方式,如果你這樣做:

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

你應該在任何MSSQL Server版本就好了。

「SET NOCOUNT ON」將阻止sql server發送像'1 rows inserted'這樣的消息,這將使您的腳本正常工作。

1

在MySQL中使用SQL Server中

SELECT * 
FROM table_name 
ORDER BY Id Desc 
LIMIT 1 

使用

SELECT top 1 * 
FROM table_name 
ORDER BY Id Desc 
相關問題