【问题标题】:CSV file from MySQL using PHP with a OOP aproach (mysqli->connect, etc.)使用 PHP 和 OOP 方法(mysqli->connect 等)从 MySQL 获取 CSV 文件
【发布时间】:2014-07-01 18:47:34
【问题描述】:

我正在尝试使用 php 和 OOP 方法直接从 mysql 表创建一个 csv 文件。这是我的代码:

$mysqli = new mysqli($host, $user, $pass, $database);

// Checking connection.
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = 'SELECT * FROM table';
$result = $mysqli->query($query);

while ($row = $result->fetch_array()) {
    $rows[] = $row;
}

    $array = "";
foreach($rows as $row) {
    $array .= "\"".$row["genus"].",".$row["species"]."\",";
}

$list = array($array);

header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename=export.csv');

$file = fopen("php://output","w");

foreach ($list as $line) {
    fputcsv($file,explode(',',$line));
}

fclose($file);
// Free result set.
$result->close();

// Close connection.
$mysqli->close();

我的问题在于创建数组时的以下部分:

    $array = "";
foreach($rows as $row) {
    $array .= "\"".$row["genus"].",".$row["species"]."\",";
}

因为当我执行 print_r ($list);我没有收到预期的数组: 数组 ( [0] => "homo,sapiens", [1] => "homo,erectus", [2] => "同性恋,厄加斯特", )

但是这个: 数组 ( [0] => "homo,sapiens","homo,erectus","homo,ergaster", )

而且当我手动创建数组时

$list = array("homo,sapiens","homo,erectus","homo,ergaster");

它工作得很好,我收到了正确的 csv 文件。

如果有人可以帮助我,向我解释我做错了什么以及我应该做些什么来修复代码,我将不胜感激。

【问题讨论】:

    标签: php mysql oop csv mysqli


    【解决方案1】:

    那是因为您将$array 视为字符串,而不是数组。 这应该有效:

    $array = array();
    foreach($rows as $row) {
        $array[] = "\"".$row["genus"].",".$row["species"]."\",";
    }
    

    我认为您希望 $list = array($array); 行神奇地将逗号分隔的字符串转换为数组中的单个元素,但事实并非如此。

    【讨论】:

    • 亲爱的@Muer 就像 Freddy Mercury 所说的那样:PHP 是一种魔法,不是吗?(​​:感谢您的帮助。它工作得很好。我知道这有点不对劲部分,但没有意识到到底是什么。我必须更好地内化这个概念(字符串、数组、变量等)。
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2018-11-23
    • 2014-09-19
    • 2016-04-11
    • 2013-12-24
    • 1970-01-01
    • 2012-10-26
    • 2011-09-16
    相关资源
    最近更新 更多