【问题标题】:PHP- Error with SQLSRV_FETCH_ASSOC & sqlsrv_fetch_arrayPHP- SQLSRV_FETCH_ASSOC 和 sqlsrv_fetch_array 错误
【发布时间】:2016-01-21 07:46:33
【问题描述】:

我使用此代码从 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;

【问题讨论】:

    标签: php sql-server sqlsrv


    【解决方案1】:

    我无法解释为什么在明确加载扩展时不会定义常量,但您应该能够通过自己定义来规避问题。

    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
    

    【讨论】:

    • 我试过 while(false !== ($row = sqlsrv_fetch_array($result,SQLSRV_FETCH_NUMERIC))) 它有效..但我不需要数值。扩展我正在使用 php_sqlsrv_55_ts.dll 。
    • 你收到同样的undefined constant 消息了吗?
    • 没有。我不知道 SQLSRV_FETCH_ASSOC 有什么问题
    • 尝试删除完整的常量,可能还有相邻的字符,然后再次输入(不要复制粘贴)。很有可能它只是一个不可见的 utf8 字符,您在某处意外复制了
    • 我安装了新的“php_sqlsrv_55_ts.dll”并替换为旧的。我不知道如何.. 但这行得通。无论如何,谢谢杰拉德
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多