2012-09-26 68 views
0

我試着這樣說:SQLSERVER + PHP:獲取剛剛插入的行ID

$result = odbc_exec($connection, 'SELECT id FROM MyTable WHERE id = @@Identity'); 

,但它給了我

syntax error: unexpected T_VARIABLE

編輯:這裏是完整的邏輯感謝您的幫助:

$result = odbc_exec($connection, 'INSERT data into the table;SELECT SCOPE_IDENTITY() AS id;'); 
$row = odbc_fetch_array($result); //this line gives the error! 
$id = $row['id']; 

edit2:我錯過了一個「;」 = _ =

反正SCOPE_IDENTITY不起作用:在fetcharray通話

+0

當然好了'SCOPE_IDENTITY()'不中你是顯示的代碼工作。 'SCOPE'是這個詞的重要組成部分 - 你需要在*和'INSERT'之後立即調用'SCOPE_IDENTITY()'。就像我在回答中所展示的那樣(並且我確信@Andomar的意思)。 –

+0

完成並編輯抱歉! – Phate

回答

1

no tuples available at this index

插入行後,您可以使用scope_identity()查找最後插入的ID。有沒有必要看它在原始表:

SELECT SCOPE_IDENTIY() 

如果該行被插在另一個連接,可以查詢的id最大值:

SELECT max(id) FROM MyTable 
+1

請注意'max'查詢。你怎麼知道這是由特定連接插入的ID? –

+0

我還是得到一個錯誤...編輯文章 – Phate

1

爲什麼不乾脆說:

$result = obdc_exec('INSERT dbo.MyTable(...) VALUES(...); SELECT id = SCOPE_IDENTITY();'); 

或更好的是,把邏輯放入存儲過程,並停止埋在你的應用程序代碼臨時SQL。

編輯因爲PHP是怪異,可能對待你的INSERT作爲一個結果,你可能需要玩這個(請原諒我,但我不是一個PHP專家):

odbc_next_result($result); 

您可能還能夠通過說:

SET NOCOUNT ON; INSERT ...; SELECT id = SCOPE_IDENTITY(); 

再次,我不知道,我不做PHP。我仍然認爲你應該在存儲過程中這樣做。

+0

你的答案是有幫助的,但有一些關於獲得查詢結果..編輯第一篇文章! – Phate

+1

您可能在某處丟失了大括號或括號。我們無法分辨,因爲您沒有顯示周圍的代碼。 –

2

假設IDENTITY列被命名爲id,嘗試:

INSERT dbo.Table 
    (column_list) 
OUTPUT INSERTED.id 
VALUES (values_list); 
相關問題