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

2

您的第一个 Query 很好,但 while 是错误的:

看看你在这里做了什么:

$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 并停止循环。

并且要完整:在您的第二个示例中,您恰好在同一行上迭代了 4 次,您只需通过调用myslq_fetch_array.

一个可能的解决方案是在while循环中再次获取该行:

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

但是,您应该更喜欢第一个解决方案,因为这样您就不需要注意结果计数是否与您的迭代器变量匹配。

sidenode:$row不带's'调用它,因为你总是只取回一行。

于 2012-11-30T10:54:50.593 回答
0

Try constructing while loop like so

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

使用ORDER BY RAND()不是最佳实践,因为必须为每一行生成随机值。更好的方法是在 PHP 中随机生成主键(例如 ID),然后根据它们进行选择。

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

将恰好选择一个随机行。类似的人应该使用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 回答