2

これは、データベースのデータを表示するための私のphpコードです。テーブルのランダムデータを表示しようとしています。

<?php
include('connection.php');
$query="SELECT * FROM `banner_ad` ORDER BY RAND() LIMIT 4";
if($query_run=mysql_query($query))
{
    $i=4;
    $rows=mysql_fetch_array($query_run);
    while($rows)
    {
        echo $rows['banner_no'];
        echo $rows['banner_name'];
        echo "<a href=\"".$rows['Banner_website_url']. "\">";
        echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">";
        echo"</a>";
    }
} else {
    echo'<font color="red"> Query does not run. </font>';
}
?>

しかし、このコードの問題は次のとおりです。

何も表示されていません。しかし、上記のコードに次のような小さな変更を加えようとしているときはいつでも:

<?php
include('connection.php');
$query="SELECT * FROM `banner_ad` ORDER BY RAND() LIMIT 4";
if($query_run=mysql_query($query))
{
    $i=4;
    $rows=mysql_fetch_array($query_run);
    while($rows && $i<4)
    {
        echo $rows['banner_no'];
        echo $rows['banner_name'];
        echo "<a href=\"".$rows['Banner_website_url']. "\">";
        echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">";
        echo"</a>";
        $i=$i-1;
    }
} else {
    echo'<font color="red"> Query does not run. </font>';
}
?>

同じシングル出力を4回表示しています。ただし、4つの異なる出力を表示する必要があります。では、バグはどこにあるのか教えてください...そして、4つの異なるランダム出力をどのように表示すると思いますか。

どんな助けでもありがたいです事前に感謝します

4

4 に答える 4

2

最初のクエリは問題ありませんが、しばらくの間は間違っています。

ここで行ったことを見てください。

$rows=mysql_fetch_array($query_run);
while($rows)
{
    echo $rows['banner_no'];
    echo $rows['banner_name'];
    echo "<a href=\"".$rows['Banner_website_url']. "\">";
    echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">";
    echo"</a>";
}

これは「無限ループ」で終了します。原因$rowsは常に設定されます。必要なものは次のとおりです。

while($rows=mysql_fetch_array($query_run))

これによりmyslq_fetch_array、while条件がチェックされるたびに新しい行が返されます。そして、4行すべてが返さ$rowsれると、falseになり、ループが停止します。

完全を期すために:2番目の例では、同じ行に対して正確に4回反復しているので、を呼び出して1回だけフェッチしましたmyslq_fetch_array

これに対する可能な解決策は、whileループ内で行を再度フェッチすることです。

$i=4;
while ($i>0){
    $rows = mysql_fetch_array(...);
    $i--;
}

ただし、最初のソリューションを選択する必要があります。これは、結果のカウントがイテレーター変数と一致するように注意する必要がないためです。

$rowサイドノード:常に1行だけ戻るため、「s」なしで呼び出します。

于 2012-11-30T10:54:50.593 に答える
0

ORDER BY RAND()行ごとにランダムな値を生成する必要があるため、使用はベストプラクティスではありません。より良い方法は、PHPで主キー(IDなど)をランダムに生成し、それに応じて選択することです。

$random_id = rand(1,4);
$query="SELECT * FROM `banner_ad` WHERE id = $random_id";

ランダムな行を1つだけ選択します。同様に、ステートメントを使用して複数の行を選択しますIN

あなたがここで見つけることができるより多くの情報。

于 2012-11-30T10:54:03.287 に答える
0
$query_run=mysql_query($query);
if(!$query_run)
{
    echo'<span style="color:red">Query did not run.</span>';//font tag is ancient
}
else
{
    if(mysql_num_rows($query_run) > 0)
    {
        while($row = mysql_fetch_assoc($query_run))
        {
            echo $rows['banner_no'];
            echo $rows['banner_name'];
            // more...
        }
    }
}
于 2012-11-30T10:56:51.283 に答える
0

そのようにwhileループを構築してみてください

while(($rows=mysql_fetch_array($query_run)) !== false)
于 2012-11-30T10:50:40.653 に答える