我遇到一個奇怪的問題,其中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