【问题标题】:Fetch array returns only one rowFetch 数组只返回一行
【发布时间】:2014-04-24 03:19:58
【问题描述】:
<?php
 function comment($postid,$db_con)
{
 $commentdiv='';
 $sql="SELECT userid,time,comment FROM comments WHERE postid='$postid' LIMIT 3";
 $query = mysqli_query($db_con, $sql); 
while($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
    $uid=$row["userid"];
    $timecomment=$row["time"];
    $comment=$row["comment"];
$sql="SELECT username,photo FROM users WHERE id='$uid'";
$query = mysqli_query($db_conx, $sql); 
$row = mysqli_fetch_array($query,MYSQLI_ASSOC);
 $username=$row["username"];
 $photo=$row["photo"];
 $userphoto='<img src="xxx/'.$username.'/'.$photo.'">';
 if($photo== NULL){
     $userphoto = '<img src="xxx/default.png">';
 }
 $commentdiv.='<div class="xxxxxxx"><div class="yyyyyy">'.$userphoto.'</div><div class="zzzzz">'.$username.'</div><div class="vvvvv">'.$comment.'</div></div>';
}
return $commentdiv;
}
?>

我是 PHP 新手,我试图从上面的 PHP 代码返回 3 个 cmets,但上面的代码只从数据库返回 1 行,为什么 fetch 数组在超过 1 行时只返回 1 行?

【问题讨论】:

  • mysqli_fetch_array() 默认只获取一行。如果您想要所有值,请使用循环..
  • 尝试使用while循环,再次只返回1行

标签: php mysql function mysqli phpmyadmin


【解决方案1】:

试试看,我使用$query2 = mysqli_query($db_conx, $sql); 进行第二次查询,因为它会重置第一个循环

 <?php
 function comment($postid,$db_con)
 {
 $commentdiv='';
 $sql="SELECT userid,time,comment FROM comments WHERE postid='$postid' LIMIT 3";
 $query = mysqli_query($db_con, $sql); 
  while($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
  $uid=$row["userid"];
  $timecomment=$row["time"];
  $comment=$row["comment"];
  $sql="SELECT username,photo FROM users WHERE id='$uid'";
  $query2 = mysqli_query($db_conx, $sql);  // added new variable
  $row = mysqli_fetch_array($query2,MYSQLI_ASSOC);
  $username=$row["username"];
  $photo=$row["photo"];
  $userphoto='<img src="xxx/'.$username.'/'.$photo.'">';
 if($photo== NULL){
    $userphoto = '<img src="xxx/default.png">';
  }
     $commentdiv.='<div class="xxxxxxx"><div class="yyyyyy">'.$userphoto.'</div><div         class="zzzzz">'.$username.'</div><div class="vvvvv">'.$comment.'</div></div>';
 }
 return $commentdiv;
}
?>

【讨论】:

  • 你的意思是,while循环和in while循环?
  • @user2982489 我更新了答案,我发现问题出在 $query = mysqli_query($db_conx, $sql); ,我改了变量名
  • @user2982489 好的,谢谢
【解决方案2】:

您正在覆盖在 while 循环中给出结果的 mysql 资源变量。

while($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
                                ^^^^^^ Original resource variable

在 while 循环中,您再次使用查询变量

$query = mysqli_query($db_conx, $sql); 
^^^^^^ Overwriting $query inside the while loop

一个建议是将循环内的变量重命名为其他名称。

【讨论】:

  • @user2982489 太好了!如果此答案或任何其他答案对您有所帮助,请考虑accepting 答案。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2014-12-14
  • 2017-04-17
相关资源
最近更新 更多