PHP 将 SQLITE 表导出为 CSV


php export sqlite table to csv

我正在尝试使用 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 )) {