2013-06-18 47 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命令而导致的问题输出。