在PHP中查询mysql并将数据导出为CSV

aan*_*est 7 php mysql csv

我有不同的表的myssql数据库.表之间的数据是链接的,我使用userid检索并显示它们.我使用PHP MYSQLi中的引用显示数据库中的所有表

但是如何将此信息导出为csv文件?我试过而不是echo将其更改为字符串并将字符串打印到csv文件但它无法正常工作.

我也试过这个例子:http: //sudobash.net/php-export-mysql-query-to-csv-file/

但我可以看到数据,但最重要的是"<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>"
csv文件中还有垃圾(如等).

还有另一种方法吗?

dcd*_*181 14

如果要将每个MySQL行写入CSV文件,可以使用内置的PHP5函数 fputcsv

$result = mysqli_query($con, 'SELECT * FROM table');
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

$fp = fopen('file.csv', 'w');

foreach ($row as $val) {
    fputcsv($fp, $val);
}

fclose($fp);
Run Code Online (Sandbox Code Playgroud)

对于写入的每一行,应该返回逗号分隔的字符串file.csv:

row1 val1, row1 val2
row2 val1, row2 val2 
etc..
Run Code Online (Sandbox Code Playgroud)

另外,请务必检查您要写入的目录的权限.


RCN*_*eil 13

这是一个使用MySQLi fetch_fields函数合并标题或字段名称的解决方案-

$query = "SELECT * FROM table";
$result = $db->query($query);
if (!$result) die('Couldn\'t fetch records');
$headers = $result->fetch_fields();
foreach($headers as $header) {
    $head[] = $header->name;
}
$fp = fopen('php://output', 'w');

if ($fp && $result) {
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="export.csv"');
    header('Pragma: no-cache');
    header('Expires: 0');
    fputcsv($fp, array_values($head)); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    die;
}
Run Code Online (Sandbox Code Playgroud)

这也是一个不同答案的修改,其中提出了类似的解决方案,但标题部分对我不起作用,所以我改变了检索它们的方法.归功于@Jrgns