1

我正在尝试使用 php 将表导出到 CSV 文件,它正在使用以下代码:

while($row = $results->fetchArray()) {
        print '"' . stripslashes(implode('","',$row)) . "\"\n";
    }

但是,当我查看 CSV 文件时,它会创建每个字段的重复项。我不知道如何将它们限制为每个字段一个。

4

2 回答 2

1

这是因为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);

运行示例

于 2013-11-02T22:17:19.540 回答
0

fetchArray默认情况下返回关联索引和数字索引。要仅返回数字索引,请使用:

while($row = $results->fetchArray( SQLITE3_NUM )) {

或者返回一个关联数组使用:

while($row = $results->fetchArray( SQLITE3_ASSOC )) {
于 2013-11-02T22:16:23.873 回答