PHP - fputcsv:将从 MySQL 字段中检索到的 JSON 值放在单独的列中
PHP - fputcsv: put JSON values retrieved from MySQL field in separate columns
我有一个 MySQL 列,其中包含一个 JSON 问题编号字符串 (0-165) 作为键和问题答案(1-5 分)作为值。我需要检索所有 MySQL 列,将它们放入一个 .csv 文件中,并在单独的列中包含 JSON 值。
到目前为止,我有一个可用的 PHP 函数,它使用 fputcsv() 将我的 MySQL table 的全部输出到 CSV 文件。这是代码:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'w');
if ($fp && $result) {
while ($row = mysql_fetch_row($result)) {
fputcsv($fp, array_values($row));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}
下面是代码的输出:
但是,我需要我的 CSV 输出类似于以下模型:
是否可以在不更改数据库结构的情况下执行此操作?我在 Whosebug 上看到代码将 JSON 值放入单独的列中,但我如何将它集成到我现有的代码中以检索所有其他 MySQL 列?
提前谢谢大家。
试试这个方法
while ($row = mysql_fetch_row($result)) {
$marks = json_decode($row['responsesJSON'],true);
unset($row['responsesJSON']);
fputcsv($fp, array_merge(array_values($row),array_values($marks)));
}
这不是最佳解决方案,只是值得深思的问题和起点。
希望对您有所帮助
非常感谢@KimAlexander 和@RocketHazmat 的建议,我明白了:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'a');
if ($fp && $result) {
while ($row = mysql_fetch_assoc($result)) {
$personal = array($row['fullname'], $row['institution'], $row['email'], $row['timestamp']);
$scores = json_decode($row['responsesJSON'], true);
fputcsv($fp, array_merge($personal, $scores));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}
我有一个 MySQL 列,其中包含一个 JSON 问题编号字符串 (0-165) 作为键和问题答案(1-5 分)作为值。我需要检索所有 MySQL 列,将它们放入一个 .csv 文件中,并在单独的列中包含 JSON 值。
到目前为止,我有一个可用的 PHP 函数,它使用 fputcsv() 将我的 MySQL table 的全部输出到 CSV 文件。这是代码:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'w');
if ($fp && $result) {
while ($row = mysql_fetch_row($result)) {
fputcsv($fp, array_values($row));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}
下面是代码的输出:
但是,我需要我的 CSV 输出类似于以下模型:
是否可以在不更改数据库结构的情况下执行此操作?我在 Whosebug 上看到代码将 JSON 值放入单独的列中,但我如何将它集成到我现有的代码中以检索所有其他 MySQL 列?
提前谢谢大家。
试试这个方法
while ($row = mysql_fetch_row($result)) {
$marks = json_decode($row['responsesJSON'],true);
unset($row['responsesJSON']);
fputcsv($fp, array_merge(array_values($row),array_values($marks)));
}
这不是最佳解决方案,只是值得深思的问题和起点。
希望对您有所帮助
非常感谢@KimAlexander 和@RocketHazmat 的建议,我明白了:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'a');
if ($fp && $result) {
while ($row = mysql_fetch_assoc($result)) {
$personal = array($row['fullname'], $row['institution'], $row['email'], $row['timestamp']);
$scores = json_decode($row['responsesJSON'], true);
fputcsv($fp, array_merge($personal, $scores));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}