PHP如何将预准备语句的格式化结果表作为字符串获取

时间:2017-03-30 14:59:23

标签: php

我目前正在开展一个小型大学项目,我必须进入PHP。我有一个分数表,我希望在PHP中获得排名列表。该查询在phpmyadmin中工作,但我无法理解准备好的语句以及如何从中获取结果。这是我的代码:

    $con = getConnection ();

if (!$con) {
    exit();
}

$stmt = $con -> prepare("SELECT NICKNAME, HIGHSCORE, @curRank := @curRank + 1 AS RANK FROM scores p, (SELECT @curRank := 0) r ORDER BY HIGHSCORE DESC;");

$stmt->execute();
$result = $stmt->get_result(); //$result is of type mysqli_result
$num_rows = $result->num_rows;  //count number of rows in the result

// the '=' in the if statement is intentional, it will return true on success or false if it fails.
if (!$result_array = $result->fetch_assoc()) {
}

for ($j=0; $j<=$num_rows ;$j++){
        $rows[$j]=$result->fetch_row();
        print_r($rows[$j]);
}
mysqli_close($con);

}

这就是print_r的样子:

  

数组([0] =&gt; guvtg [1] =&gt; 234 [2] =&gt; 2)数组([0] =&gt; guvtgloa [1]   =&GT; 228 [2] =&gt; 3)数组([0] =&gt; guvtgloakkschmua [1] =&gt; 226 [2] =&gt; 4)数组([0] =&gt; guvtgloakk [1] =&gt; 182 [2] =&gt; 5)

正如你所看到的,我正在获得整个数组,但我只想要并输出如下:

guvtg,234,2 guvtgloa,228,3 等。

有人知道如何获得正确的结果吗?谢谢

2 个答案:

答案 0 :(得分:1)

您总是从数据库查询中获取数组,但听起来您只想以不同方式格式化输出。你可以试试这个:

变化

print_r($rows[$j]);

echo implode(', ', $rows[$j]), "\n";

implode将使用逗号+空格连接每个数组的元素,并在每条记录后面添加换行符,每行都会自行行。

答案 1 :(得分:1)

如果你想使用fetch_assoc(),它会给你一个关联数组,每个项目对应一个行字段;当你超出最后一行时,它将返回FALSE。

while ( $row = $result->fetch_assoc() ) {
        echo $row[ 'NICKNAME' ] . "," . $row['HIGHSCORE'] . "," . $row['RANK'];
        // maybe echo something at the end of the line (another comma or a line break....)
}

您不必计算行数,但请务必检查$result是否为FALSE

同样,如果您不关心列名,可以使用fetch_row

while ( $row = $result->fetch_row() ) {
        echo implode( ',', $row );
        // maybe echo something at the end of the line (another comma or a line break....)
}

这样您就可以使用implode将数据打包为逗号分隔值。

(但你必须处理在outout中每一行之间放置的字符)

实施例。如果你想要用换行符分隔的行(这会产生一个CSV文件),把echo "\n";作为循环中的最后一个语句。

如果你想要一个逗号分隔值流(没有换行符),那么一个解决方案就是:

$first = true;
while ( $row = $result->fetch_WOR() ) {
        if( $first ) { $first = false; } else { echo ","; }
        echo implode( ',', $row );
        // maybe echo something at the end of the line (another comma or a line break....)
}