Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;SQL Server+;SQL Server驱动程序=sqlsrv\u num\u行严重问题_Php_Sql_Sql Server - Fatal编程技术网

PHP+;SQL Server+;SQL Server驱动程序=sqlsrv\u num\u行严重问题

PHP+;SQL Server+;SQL Server驱动程序=sqlsrv\u num\u行严重问题,php,sql,sql-server,Php,Sql,Sql Server,我在申请中遇到了严重的问题 当我在SQL Server数据库中选择“CTE”,然后使用sqlsrv_num_rows来计算结果对象中的行数时,我得到了奇怪的结果:-1 此值甚至不在手册中(链接:) 示例代码: 我们已选择“CTE-公共表表达式”,例如: $sql = ";WITH unsorted_cte AS ( SELECT * FROM xxx WHERE yyy ) SELECT u_cte.* FROM [unsorted_cte] u_c

我在申请中遇到了严重的问题

当我在SQL Server数据库中选择“CTE”,然后使用sqlsrv_num_rows来计算结果对象中的行数时,我得到了奇怪的结果:-1

此值甚至不在手册中(链接:)

示例代码:

我们已选择“CTE-公共表表达式”,例如:

$sql = ";WITH unsorted_cte AS
(
  SELECT
    *
  FROM
    xxx
  WHERE
    yyy
)

SELECT
  u_cte.*
FROM
  [unsorted_cte] u_cte
ORDER BY
    u_cte.[zzzz] ASC";
在sql控制台中@@rowcount有适当的值,但是当我们在php脚本中使用这个select时,它返回-1

样本:

// make query with proper coursor

$result = sqlsrv_query($link, $sql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET));

// var dump shows us proper resource

var_dump($result):
resource(3) of type (SQL Server Statement)

// sqlsrv_num_rows show us wrong rows count

var_dump(sqlsrv_num_rows($result));
int(-1)

// sqlsrv_errors are empty

var_dump(sqlsrv_errors());
NULL
我试图在整个课程中修复它,并选择行参数,但我无法修复它

顺便说一句,在我的例子中,唯一有效的选择行是SQLSRV\u CURSOR\u FORWARD

我的环境: PHP5.3 MSSQL 2005 Windows服务器 PHP1.1的SQL Server驱动程序(msdn.microsoft.com/en-us/library/ee229551(SQL.10.aspx) 数据库编码:unicode


我希望,sb知道这个问题的解决方案。

这里描述的问题暴露了构建sqlsrv驱动程序的ODBC驱动程序中的一个错误。ODBC驱动程序对以开始的SQL查询执行某种级别的解析,然后错误地处理该查询。解决方法是将查询作为存储过程执行,这会更改ODBC驱动程序执行的代码路径

SQL Server本机客户端团队(SNAC是Microsoft的ODBC实现)意识到了这个错误。我会确保他们知道这个错误造成的影响

谢谢


Brian Swan,Microsoft

使用给定的工具格式化您的问题将使他人更容易帮助您。使用看起来像二进制字符串的按钮将代码格式化为代码。