2012-09-26 30 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); 
相关问题