用于PHP的Microsoft的sqlsrv驱动程序在查询"SELECT SCOPE_IDENTITY()AS id"时未返回任何结果

mol*_*rus 8 php sql-server

使用php_mssql驱动程序可以正常运行此查询:

INSERT INTO Table(columnName) VALUES ('text');
SELECT SCOPE_IDENTITY() AS id;
Run Code Online (Sandbox Code Playgroud)

表有一个id列,它是一个标识.我会执行该查询,并获取表中的最后一个id.

如果使用Microsoft的php_sqlsrv驱动程序执行查询,则相同的代码不起作用.

执行查询时没有出现任何错误(sqlsrv_query函数),但调用sqlsrv_fetch_array时出现以下错误:"查询的活动结果不包含任何字段"

我搜索了很多,但没有找到答案,对我来说是一个很大的惊喜,以前没有人遇到这个问题,似乎没有人使用这个驱动程序,即使是自PHP 5.3以来的"官方"驱动程序发布...

谢谢.

Red*_*ter 10

在初始CTP中,字段索引从1开始.之后它们被改为从0开始.

尝试这样的事情:

// connection to the dbserver

$result = sqlsrv_query("INSERT INTO Table(columnName) VALUES ('text'); SELECT SCOPE_IDENTITY() AS ID");

echo "The last insert_id is".lastId($result);

function lastId($queryID) {
     sqlsrv_next_result($queryID);
     sqlsrv_fetch($queryID);
     return sqlsrv_get_field($queryID, 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 这段代码给了我发现发生了什么的线索.INSERT_QUERY返回1个结果,SELECT SCOPE_IDENTITY返回另一个结果.如果您指向第一个结果,则在尝试获取数组时会出现错误(插入查询不返回任何内容),因此您必须使下一个结果可用(sqlsrv_next_result),然后您可以调用sqlsrv_fetch_array.如果要从php_mssql迁移到php_sqlsrv,请注意,因为此行为不同,并且可能导致错误. (2认同)