虽然循环不能正常工作

时间:2014-04-29 16:30:59

标签: php mysqli

我在我的函数中有一个while循环,用于获取1乘1的值但是我得到的唯一值

while($row=  mysqli_fetch_array($this->result))
    {
        $image=$this->getEventDetails($row['Album_top'],'Event_image');
        $alert.="<div class=facBox>
        <a href='gallery.php?id=$row[Id]' style=margin-top:0px;>
        <img src='admin/customer/eventgallery/$image' alt=''>
        </a>
        <div class=clear></div>
        <a href='gallery.php?id=$row[Id]' style=margin-top:0px;>$row[Album_title]</a>
                </div>";
    }

我从另一个

的函数中获取图像名称
    function getEventDetails($id,$fieldname)
{
    $get="Select * from sarnaevent where Id='$id'";
    $this->result=mysqli_query($this->con,$get);
    $row=mysqli_fetch_array($this->result);
    return $row[$fieldname];
}

现在我从循环获得唯一的值我的$ alert只有一个facbox。如果我删除这一行

$this->getEventDetails($row['Album_top'],'Event_image');

它工作正常但我希望这一行获取图像名称。

3 个答案:

答案 0 :(得分:2)

getEventDetails()内,您指定$this->result,覆盖$this->result的先前内容。由于这发生在使用前一个结果的while循环内部,因此循环退出,因为没有其他结果可以从内部获取中检索。

getEventDetails()方法中使用不同的临时结果集。

function getEventDetails($id,$fieldname)
{
    $get="Select * from sarnaevent where Id='$id'";
    // Different variable name...
    $temporary_result = mysqli_query($this->con,$get);
    $row=mysqli_fetch_array($temporary_result);
    return $row[$fieldname];
}

一般情况下,我会质疑是否需要将瞬态结果资源存储到对象的$this->result中以用于大多数目的。在您在方法中使用它的任何情况下,最好只使用仅作用于方法的变量,该方法仅在使用结果集的生命周期内存在。

$id直接发送到查询中时请务必谨慎。虽然我怀疑它是一个整数变量,因此它不会破坏SQL,但养成使用prepare()/execute()来防止SQL注入的习惯是个好主意。

最后一点需要注意:将字符串变量放入HTML标记时,请务必使用htmlspecialchars()来避免HTML格式错误。 (如果已知Id是整数,则没有必要)

"...<a href='gallery.php?id=$row[Id]' style=margin-top:0px;>" . htmlspecialchars($row['Album_title']) . "</a>..."

答案 1 :(得分:0)

不要使用mysqli_fetch_array()尝试使用mysqli_fetch_assoc(请参阅:http://php.net/manual/en/mysqli-result.fetch-assoc.php);返回的数组将是关联的(键值对),其中键是列名。

答案 2 :(得分:0)

您正在吹灭原始查询。

首先,进行查询,并将结果分配给$this->result。然后迭代这些结果。对于第一行,您会立即使用新结果创建一个新查询覆盖 $this->result,然后尝试继续...但您刚刚替换了剩余的结果来自事件详细信息查询的结果,因此mysqli_fetch_array无法找到更多结果。

解决方案:为该结果使用单独的变量。本地的应该没问题,因为你不能在该功能之外使用它。您可能还需要使用单独的连接;我不确定。只需更改$this->result中的getEventDetails()即可尝试使用$eventResult之类的内容。