我遇到一个奇怪的问题,其中sqlsrv_query()
返回有效的语句资源,但sqlsrv_fetch_array()
随后返回false。我在MS SQL Server Management Studio中测试了我的查询($q
),所以我知道它会返回一定数量的行。我是代码...PHP:sqlsrv_fetch_array()返回false
$r = @sqlsrv_query($dbcMssql, $q, array(), array('Scrollable'=>'static')); // works
$rowCount = sqlsrv_num_rows($r); // this shows there are correct number of rows
$row = sqlsrv_fetch_array($r, SQLSRV_FETCH_ASSOC); // $row is FALSE
我使用的另一个MSSQL数据库中的代码相同的位,这是工作没有任何问题。这个MSSQL数据库的唯一区别在于它使用BIGINT作为主键,并且一些列名称是不同的(这不重要)。
我在做什么错?
UPDATE:
Whilte $stmt
是不是假的,我看了看错误无论如何,这给了我
[0] => IMSSP
[SQLSTATE] => IMSSP
[1] => -35
[code] => -35
[2] => Invalid type
[message] => Invalid type
的IMSSP让我相信的是,根据在http://php.net/manual/en/function.sqlsrv-errors.php
文档,这是我的SQL for PHP 2.0驱动程序导致此问题。我发现PHP 3.0的SQL已经发布。这可能是我想的问题..因为我试图查询的数据库是MSSQL(2008?vs 2005)的一个较新版本,而不是我之前使用过的没有任何问题的版本。但是,这个驱动程序只用VC9编译(两者都可用),而我的PHP 5.3是用VC6编译的,所以不会加载。这是否意味着我需要使用源代码重新编译它,或者使用VC9版本重新安装PHP?
我不知道如何重新编译,所以我猜想重新安装PHP 5.3版本的PHP 5.3是我现在的选择。
删除'@'标志,看看你是否得到一个错误 –
嗨,约翰,我也试过。没有任何错误。 – musicliftsme
我删除了'$ stmt === false'检查错误,因为'sqlsrv_query()'没有返回false。所以,有一个错误,但它不会被'sqlsrv_error()'块的if语句捕获。 – musicliftsme