PHP-错误与SQLSRV_FETCH_ASSOC& sqlsrv_fetch_array

时间:2016-01-21 07:46:33

标签: php sql-server sqlsrv

此代码我用于从excel中的sql server查询下载结果。 连接&查询工作正常,我已经正确安装了sqlsrv扩展。 但我仍然得到像这样的错误

  

“使用未定义的常量SQLSRV_FETCH_ASSOC - 假设    SQLSRV_FETCH_ASSOC'“
  “警告:sqlsrv_fetch_array()期望参数2为”

我认为问题出在SQLSRV_FETCH_ASSOC上。 任何帮助将不胜感激。

  function cleanData(&$str)
  {
    $str = preg_replace("/\t/", "\\t", $str);
    $str = preg_replace("/\r?\n/", "\\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
  }

  $serverName = "********"; 
$connectionInfo = array( "Database"=>"****", "UID"=>"***", "PWD"=>"*****");
$connect = sqlsrv_connect( $serverName, $connectionInfo);

  // filename for download
  $filename = "website_data_" . date('Ymd') . ".xls";

  header("Content-Disposition: attachment; filename=\"$filename\"");
  header("Content-Type: application/vnd.ms-excel");

  $flag = false;
  $query="select * from business_partners ORDER BY 1 desc";

  $result = sqlsrv_query($connect, $query) or die('A error occured: ' . sqlsrv_errors());
  while(false !== ($row = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC))) 
  {
    if(!$flag) {
      // display field/column names as first row
      echo implode("\t", array_keys($row)) . "\r\n";
      $flag = true;
    }**strong text**
    array_walk($row, 'cleanData');
    echo implode("\t", array_values($row)) . "\r\n";
  }
  exit;

1 个答案:

答案 0 :(得分:2)

我没有解释为什么在明确加载扩展时不会定义常量,但是你应该能够通过自己定义来解决问题。

SQLSRV_FETCH_ASSOC has the value 2,所以你应该把它添加到某个地方,最好放在你总是包含的文件中:

if ( !defined( 'SQLSRV_FETCH_ASSOC' ) )
  define( 'SQLSRV_FETCH_ASSOC', 2 );

if ( !defined() )子句确保您的代码在以后不会中断,当实际问题得到修复并且常量突然再次出现时。

或者,如果你只在文件中使用它一次并且不值得定义常量(可读性除外),你可以只使用实际值作为参数:

$row = sqlsrv_fetch_array( $result, 2 ); // 2 = SQLSRV_FETCH_ASSOC