sqlserver + php:刚刚插入行id

时间:2012-09-26 13:32:02

标签: php sql sql-server

我试过这种方式:

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

但它给了我

  

语法错误:意外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不起作用:给出

  

此索引没有可用的元组

on fetcharray call

3 个答案:

答案 0 :(得分:2)

假设IDENTITY列名为id,请尝试:

INSERT dbo.Table
    (column_list)
OUTPUT INSERTED.id
VALUES (values_list);

答案 1 :(得分:1)

插入行后,您可以使用scope_identity()查找最后插入的ID。没有必要在原始表格中查找:

SELECT SCOPE_IDENTIY()

如果该行已插入另一个连接,您可以查询id的最大值:

SELECT max(id) FROM MyTable

答案 2 :(得分: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。我仍然认为你应该在存储过程中这样做。