Php 而循环工作不正常

Php 而循环工作不正常,php,mysqli,Php,Mysqli,在我的函数中有一个while循环,用于获得1乘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[

在我的函数中有一个while循环,用于获得1乘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>";
    }
现在我从循环中得到的唯一值是我的$alert只有一个facbox。如果我删除这行

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

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

不要使用
mysqli\u fetch\u array()
尝试使用
mysqli\u fetch\u assoc
(请参阅:);返回的数组将是关联的(键值对),其中键是列名。

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,但是养成使用它来防止SQL注入的习惯是一个好主意

最后一点要注意的是:在将字符串变量放入HTML标记中时,请确保使用
htmlspecialchars()
对其进行转义,以防止HTML格式错误。(如果已知
Id
是一个整数,则不需要它)

“…”

您正在取消原始查询

首先,执行一个查询,并将其结果分配给
$this->result
。然后迭代这些结果。对于第一行,立即进行新查询,用新结果覆盖
$this->result
,然后尝试继续。。。但是您刚刚用事件详细信息查询的单个结果替换了其余结果,因此
mysqli\u fetch\u array
找不到更多结果


解决方案:对该结果使用单独的变量。一个本地的就可以了,因为你不能在这个函数之外使用它。您可能还需要使用单独的连接;我不确定。只需在
getEventDetails()
中更改
$this->result
即可尝试使用类似
$eventResult
的内容。

不,这样做行不通。它显示了同样的事情。当我从getEventDetails()中输入值时,它会产生问题,否则它会工作。默认情况下,
mysqli\u fetch\u array()
返回数字键和关联键,因此它们都存在。@MichaelBerkowski很高兴知道,我一直误以为
mysqli\u fetch\u assoc
是获取以列名为键的关联数组的唯一方法。干杯即使这样,您也可能需要调用$stmt->store_result();为了确保从服务器上获取所有结果,或者第二个select命令可能会终止第一个命令的结果。或者这就是我的经验。YMMV。@dboals准备了一份声明,我认为你是绝对正确的。对于对
mysqli\u query()/mysqli\u fetch\u*()
的常规嵌套调用,我认为这没有必要,但我可能弄错了。它起作用了,我遇到了$this->result的问题,我用您的代码更改了它,效果很好。。。。这一次我有东西要学。。。。。感谢you@MichaelBerkowski是的,对于非嵌套语句,我的理解是它会降低整体执行速度,但这可能是真的,也可能不是真的,这取决于结果集的大小。我只在嵌套语句时才这样做。@dboals无论哪种方式,连接查询通常比嵌套循环更可取(并且可以实现)。。;
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];
}
"...<a href='gallery.php?id=$row[Id]' style=margin-top:0px;>" . htmlspecialchars($row['Album_title']) . "</a>..."