我用来从excel中的sql服务器查询下载结果的代码。连接和查询工作正常,我已经正确安装了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;
我没有解释为什么在扩展明确加载时不定义常量,但您应该能够通过自己定义来规避问题。
SQLSRV_FETCH_ASSOC
的值为 2,所以你应该把它添加到某个地方,充其量是在你总是包含的文件中:
if ( !defined( 'SQLSRV_FETCH_ASSOC' ) )
define( 'SQLSRV_FETCH_ASSOC', 2 );
if ( !defined() )
子句确保您的代码在实际问题得到解决并且常量突然重新出现时不会中断。
或者,如果您只在文件中使用它一次,并且实际上不值得定义常量(除了可读性),则可以仅使用实际值作为参数:
$row = sqlsrv_fetch_array( $result, 2 ); // 2 = SQLSRV_FETCH_ASSOC