【问题标题】:PHP only returning first MySQL resultPHP 只返回第一个 MySQL 结果
【发布时间】:2012-08-02 20:29:02
【问题描述】:

我有一个循环,应该显示所有 MySQL 结果的摘要。它通过确定可能有多少结果然后循环多次来做到这一点。因此,如果有 43 个结果与我的查询匹配,而不是显示所有 43 个结果,它只显示第一个结果 43 次。请帮忙!这是我的代码:

if (empty($res)) {

echo 'No results found';

} else if($num>1){

    echo "<b>".$num_rows."<b> results found...<br>";

    while ($res = mysql_fetch_assoc($result)) {

    echo "<a href='#'>{$res['dealer']}</a><br>";

    }

} else {

echo "<table border=\"0\"><tr><td colspan=\"2\"><span class=\"dealer\">" . $res['dealer'] . "</span></td></tr><tr><td><span class=\"label\">Pin: </span><span class=\"inf\">" . $res['pin'] . "</span></td><td><span class=\"label\">OB CODE: </span><span class=\"ob\">" . $res['ob'] . "</span></td></tr><tr><td><span class=\"label\">Program Director:</span></td><td><span class=\"inf\">" . $res['contact'] . "</span></td></tr><tr><td valign=\"top\"><span class=\"label\">Address:</span></td><td><span class=\"inf\">" . $res['address'] . "<br>" . $res['city'] . ", " . $res['state'] . "<br>" . $res['zip'] . "</span></td></tr><tr><td><span class=\"label\">Dealer Phone:</span></td><td><span class=\"inf\">" . $res['phone'] . "</span></td></tr><tr><td><span class=\"label\">Codes Valid on:</span></td><td><span class=\"inf\">" . $res['website'] . "</span></td></tr></table>";

}

非常感谢!

【问题讨论】:

  • 您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定要使用哪一个,read this SO article.
  • 请格式化您的代码以使其可读
  • 没问题,尝试复制/粘贴它有点奇怪。我不得不弄乱间距以使其正确发布为代码。
  • $num_rows 在哪里定义?认为您的意思是$num。我建议您慢慢查看您的代码,以确保您了解每个步骤等。看起来您有点纠结。无意冒犯。

标签: php mysql loops repeat


【解决方案1】:

那是因为您只获取了第一行(当您获取 $res = mysql_fetch_assoc($result); 时)。您尝试做的实际上是不必要的:mysql_fetch_assoc() 每次运行时都会自动将数据指针向前移动。你可以做的(实际上是常见的做法)是这样的:

//...
while ($res = mysql_fetch_assoc($result)) {
    echo "<a href='#'>{$res['dealer']}</a><br />";
}
//...

另一方面,mysql_* 函数即将被弃用。您可以改用mysqliPDO;如果你是一个需要大量代码切换的懒惰者(比如我),你可以使用mysqli 过程函数——它们几乎与原来的mysql_* 函数相同。

【讨论】:

  • 我用花括号这样尝试过,但得到了错误:意外的“{”
  • @HiggsBoson 这很可能是因为您错误地插入了它。我猜不出你是如何插入它的;你必须给我看。
  • 等一下,抱歉,忘记删除引号了。它仍然无法正常工作。每次都返回“未找到结果”。
  • @HiggsBoson 这很可能与您的 if(empty($res)) 行有关,因为您不再有 $res 用于检查其是否为空。
  • 谢谢!为什么我没看到?好的,我将其更改为 if($num==0)。现在,如果有多个结果,我会得到所有结果,但如果只有一个,它会返回表,但不会填写数据库中的变量。我还需要在所有这些上加上卷发吗?
【解决方案2】:

你应该使用

$res = mysql_fetch_assoc($result);

每次你想检索一个新行时

【讨论】:

    【解决方案3】:

    你必须在你的循环这样做:

    $res = mysql_fetch_assoc($result);
    

    ...因为否则只会拉出第一个结果。以下是正确的做法:

    while($res = mysql_fetch_assoc($result)){
        echo "<a href='#'>".$res['dealer']."</a><br>";
        i++;
    }
    

    干杯

    【讨论】:

    • 所以我还需要 $i
    • 我很乐意为您提供进一步的帮助,但请先更新您的代码,这样我才能看到您正在使用什么。
    • if(empty($res)) -- 这不行,你还没有声明$res,对吧? if($num == 0) 怎么样
    【解决方案4】:

    使用:

    while($res = mysql_fetch_assoc($result)) { echo $res['dealer']; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 2016-05-23
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多