我最近从 PHP 5.6 切换到 PHP7。以前在 PHP 5.6 中运行良好的 PHP 脚本现在在 PHP 7 中“复制列数据”。我不明白为什么。代码:
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\t", $str);
$str = preg_replace("/\r?\n/", "\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
// force certain number/date formats to be imported as strings
if(preg_match("/^0/", $str) || preg_match("/^+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str))
{
$str = "'$str";
}
}
$day_num = date(d);
$month_num = date(n);
$year_num = date(Y);
// file name for download
$filename = "Subscriber_list_" . $month_num . "-" . $day_num . "-" . $year_num . ".xls";
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=\"$filename\"");
header('Cache-Control: max-age=0');
echo "ID \t Title \t First Name \t Last Name \t E-Mail \n";
$news_query = mysqli_query("SELECT DISTINCT id, title,firstname, lastname, email FROM users WHERE newsletter = 1 ");
while($row =mysqli_fetch_array($news_query, MYSQL_ASSOC)) {
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\n";
}
exit;
数据库相当标准。预先感谢。
MYSQL_ASSOC
常量而不是
MYSQLI_ASSOC
。当您使用 PHP 5 时,这个拼写错误发生了,因为这两个常量具有相同的值。但由于 MYSQL 扩展已被删除,
MYSQL_ASSOC
常量在 PHP 7 中是
undefined,因此
mysqli_fetch_array
遵循获取数字键和关联键的默认行为,因此出现重复的列。 <pre>
function fetch_assoc($result) {
return mysqli_fetch_assoc($result);
}
</pre>