Php CSV输出被复制

Php CSV输出被复制,php,mysql,csv,Php,Mysql,Csv,我试图以csv格式输出数据库所选行,但它会输出重复的值,而不是单个值。我希望它有列,列下面有值。输出: onlineId,paramId,paramValue 4cd87b00dddca780fcaf66d0108b25f6,4cd87b00dddca780fcaf66d0108b25f6,1,1,11,11 代码如下: $output = fopen('php://output', 'w'); fputcsv($output, array('onlineId', 'paramId', 'par

我试图以csv格式输出数据库所选行,但它会输出重复的值,而不是单个值。我希望它有列,列下面有值。输出: onlineId,paramId,paramValue 4cd87b00dddca780fcaf66d0108b25f6,4cd87b00dddca780fcaf66d0108b25f6,1,1,11,11

代码如下:

$output = fopen('php://output', 'w');
fputcsv($output, array('onlineId', 'paramId', 'paramValue'));

$host = "localhost";
$database = "keytarget";
$username = "root";
$password = "";
$con = new PDO("mysql:host=" . $host . ";dbname=" . $database, $username, $password);

//Run our query
$sql = "
        SELECT
            ui.onlineId, uin.paramId, uin.paramValue
        FROM
            v5_userinfo ui
        JOIN
            v5_userinfo_number uin
        ON
            uin.userId = ui.id
        ;
        ";

$statement = $con->prepare($sql);
$statement->execute();
while ($row = $statement->fetch()) {
    fputcsv($output, $row);
}

这是因为当您检索数据时,它会将关联数组和普通数组混合在一起。因此,您的$row var类似于:

array(
   [0]=>4cd87b00dddca780fcaf66d0108b25f6
   [onlineId]=>4cd87b00dddca780fcaf66d0108b25f6
   [1]=>1
   [paramId]=>1
   [2]=>11
   [paramValue]=>11
)
因此,您的解决方案可以是:

while ($row = $statement->fetch()) {
    $array=array($row[0],$row[1],$row[2]);
    fputcsv($output, $array);
}
或者更简单一点:

while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    fputcsv($output, $row);
}