我正在尝试使用 php 将表导出到 CSV 文件,它正在使用以下代码:
while($row = $results->fetchArray()) {
print '"' . stripslashes(implode('","',$row)) . "\"\n";
}
但是,当我查看 CSV 文件时,它会创建每个字段的重复项。我不知道如何将它们限制为每个字段一个。
这是因为SQLite3Result::fetchArray
默认情况下会为结果中的每一列获取数字索引和命名索引。所以$row
可能看起来像这样:
array(
0 => 'Fred',
'firstname' => 'Fred',
1 => 'Jones',
'lastname' => 'Jones',
2 => 'fredjones@example.com',
'email' => 'fredjones@example.com'
)
解决这个问题的方法是fetchArray
通过传递一个常量来指定调用中的其他行为:
while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
这意味着只会获取列的名称。同样,您可以这样做SQLITE3_NUM
:在您的情况下,这没有什么区别。
另请注意,输出 CSV 数据的更好方法是使用该fputcsv
方法,该方法根据需要处理封装和转义。它需要一个文件句柄:如果你只想回显数据,你可以使用STDOUT
常量:
fputcsv(STDOUT, $row);
fetchArray
默认情况下返回关联索引和数字索引。要仅返回数字索引,请使用:
while($row = $results->fetchArray( SQLITE3_NUM )) {
或者返回一个关联数组使用:
while($row = $results->fetchArray( SQLITE3_ASSOC )) {