php - 如何将整个数据库 MYSQL 导出到 CSV 文件?

标签 php mysql

我有一个名为demo_db的数据库 如下表:

user
  Id
  Name

history
  Id
  userId
  report

start_test
  Id
  userId
  score

final_test
  Id
  userId
  score

如何使用 MySQL 中的 INTO OUTFILE 将所有表导出到 CSV 文件中?所以我可以有列名和数据下方,我希望能够添加过滤器,如果有办法将每个表添加到同一文件中的新选项卡......或者如果我可以显示所有每个用户的数据在一行中?

我不能执行以下操作吗:SELECT user.、history.、start_test.*、final_test.* INTO OUTFILE FROM user、history、start_test、final_test

我用 mysqldump 完成了它,但它没有按照我想要的方式显示数据。

我正在使用 PHP 来完成此操作。

最佳答案

没有命令可以直接执行此操作,您需要模拟 mysqldump 的行为并按照您想要的方式输出 CSV。

$FILE = fopen("output.csv", "w");
mysql_connect($server, $login, $password);
$res = mysql_query("SHOW TABLES FROM $db");
$tables = array();
while($row = mysql_fetch_array($res, MYSQL_NUM)) {
    $tables[] = "$row[0]";
}
foreach($tables as $table) {
    $columns = array();
    $res = mysql_query("SHOW COLUMNS FROM $table");
    while($row = mysql_fetch_array($res, MYSQL_NUM)) {
        $columns[] = "$row[0]";
    }
    fwrite($FILE, implode(",", $columns); fwrite("\n");
    $resTable = mysql_query("SELECT * FROM $table");
    while($row = mysql_fetch_array($resTable, MYSQL_NUM)) {
        fwrite($FILE, implode(",", $row)); fwrite("\n");
    }
}

MYSQL_NUM 用于为您提供一个数字索引数组。

如果您不想输出到文件,而是直接从网站将其下载到您的计算机,请将以下行添加到脚本的开头:

header('Content-Type: text/csv; name="filename.csv"');
header('Content-Disposition: attachment; filename="filename.csv"');

将 fwrite 更改为 echo 或 print。

哦,我在输出中添加了一些换行符,因为我确信您不会想要一大长行。

关于php - 如何将整个数据库 MYSQL 导出到 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485173/

相关文章:

php - Composer : scan only tag names, 不是整个 composer.json

mysql - 在mysql中创建表时出现日期时间错误

mysql - 使用 Sum 函数连接多个表的 SQL 查询

java - 如果没有主机模式,从 docker 到 localhost 的 mysql 的 jdbc url 无法工作

php - 如何将表单从 iFrame 发布到父级

php - 使用正则表达式从字符串中提取段

php - 将具有相同标识符的数组中的 ROWS 分组

javascript - 加载窗口上的 jQuery

PHP 函数在本地主机上运行,​​但不在我的服务器上运行

sql - SELECT 语句帮助