2013-06-18 49 views
1

我最近從ODBC切換到SQLSRV以連接PHP的MS SQL 2008。存儲過程中的PRINT函數存在一個奇怪的問題。如果打印功能顯示超過700個字符,則返回「HTTP錯誤500.0 - 內部服務器錯誤」消息。SQLSRV打印功能問題

以下是我使用的工具列表:

  1. PHP 5.3.6
  2. MS SQL Server 2008的
  3. [PHP_MSSQL]延長= php_sqlsrv_53_nts.dll
  4. IE8(這個問題是其他瀏覽器以及Firefox,Chrome)
  5. Web服務器IIS

以下是代碼 PHP代碼:

<?php 

$link = sqlsrv_connect('dbname\instance2008', array("UID"=>'UID',"PWD"=>'PWD',  "Database"=>'Database_name',"CharacterSet" => "UTF-8", "MultipleActiveResultSets" => 0)); 

if(!$link) die(print_r(sqlsrv_errors(), true)); 
sqlsrv_configure('WarningsReturnAsErrors', 0); 

$sql = "EXEC spa_i18n_test"; 

$result = sqlsrv_query($link, $sql); 

if(!isset($result)){ 
    error_reporting(2047); 
} 

while($row = sqlsrv_fetch_array($result)){ 
echo $row[0] . ": " . $row[1] . "<br />"; 
} 

?> 

SCRIPT存儲過程。

Create proc spa_i18n_test 
AS 
SET NOCOUNT ON 
print '2222222222222111111111111111112dddddddddddddd2222222222 
     222111111111111111112dddddddddddddd2222222222222111111 
     111111111112dddddddddddddd222222222222211111111111111111 
     2dddddddddddddd222222222222211111111111111122222222222221 
     11111111111111112dddddddddddddd222222222222211111111111111 
     1112dddddddddddddd2222222222222111111111111111112dddddddddd 
     dddd2222222222222111111111111111112dddddddddddddd22222222222 
     221111111111111112222222222222111111111111111112dddddddddddd 
     dd2222222222222111111111111111112dddddddddddddd2222222222222 
     111111111111111112dddddddddddddd2222222222222111111111111111 
     112dddddddddddddd2222222222222111111111111111222222222222211 
     1111111111111112ddddddddd22222wwwwwwwwwwwwwwwwwwwwwwwwwwwwww 
     wwwwwwwwwwwwwwwwwwwww' 

select '1' a, '2' b 

我曾嘗試在http://support.microsoft.com/kb/269412給出的解決方案,但遺憾的是它沒有爲我工作。

請分享一些工作。

回答

1

SQLSRV不允許執行打印消息導致錯誤。使用

sqlsrv_configure('WarningsReturnAsErrors', 0); 

只是之前

sqlsrv_query() 

功能取消錯誤。即僅禁用,但不會在數據庫層忽略。

0

這個問題仍然存在於PHP 7.0.11使用SQLSRV驅動器4.1.2(64)當字符計數大於約5200個字符。

sqlsrv_configure('WarningsReturnAsErrors', 0);很重要,但不能解決問題。

我的解決方法是向有問題的存儲過程添加一個位參數,以便可選地抑制由於PRINT命令而導致的問題輸出。