我目前正在开展一个小型大学项目,我必须进入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 等。
有人知道如何获得正确的结果吗?谢谢
答案 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....)
}