我在我的函数中有一个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');
它工作正常但我希望这一行获取图像名称。
答案 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
之类的内容。