2

テーブルからデータをプルするために使用しているコードは次のとおりです。

require_once 'connect.php';
$sql = "SELECT * FROM `db-news`";
$result = $mysqli->query($sql);
$row = mysqli_fetch_assoc($result);
while ($row = $result->fetch_assoc()) {
    printf ($row['pagename'].' - To edit this page <a href="editnews.php?id='.$row['id'].'">click here</a><br>');
}

常に最初の行は無視されます。mysqli_fetch_assocSOの他の例のように2回電話をかけているわけではありません。echowhileループでに変更しようとしprintfましたが、DBでは最初の行が無視されます。

次に何をしようか迷っていますか?

4

4 に答える 4

8

mysqliはそれを無視しませんが、実際にはwhileループの前に最初の行をフェッチしています

$row = mysqli_fetch_assoc($result); //remove this line
while ($row = $result->fetch_assoc()) {
   ....
}
于 2012-11-13T09:53:33.783 に答える
2

問題は、次の抜粋の最初の行です。

$row = mysqli_fetch_assoc($result);
while ($row = $result->fetch_assoc()) {

mysqli_fetch_assocすでに最初の行を取得しています(したがって、whileループではすでに1ステップ進んでいます)。パーツの代わりにその行を$reslut->fetch_assocwhileステートメントに入れるか、削除する必要があります。それで問題は解決するはずです。

于 2012-11-13T09:54:47.177 に答える
0

mysqli_fetch_assoc()これはと同じで$result->fetch_assoc()あり、この関数を呼び出すたびに、内部ポインタが次の行に進みます。ループの直前にこの関数を1回呼び出しています。つまり、最初の行を読み取り、結果を無視しています。その行を削除します。

最初の行をフェッチしてから、結果全体をループする必要がある場合は、のforeach代わりに使用しwhileます。例えば:

require_once 'connect.php';
$sql = "SELECT * FROM `db-news`";
$result = $mysqli->query($sql);
foreach($result as $row) {
    printf($row['pagename'].' - To edit this page <a href="editnews.php?id='.$row['id'].'">click here</a><br>');
}
于 2020-07-25T22:52:31.493 に答える
-1

最初のステップをスキップしないため、do while代わりに使用してください。while

于 2018-09-03T21:36:28.977 に答える