Php MySQLi和while循环有问题

Php MySQLi和while循环有问题,php,mysqli,Php,Mysqli,我在类中有以下代码: function getRolePerms($role) { if (is_array($role)) { $roleSQL = "SELECT * FROM `role_perms` WHERE `roleID` IN (" . implode(",",$role) . ") ORDER BY `ID` ASC"; } else { $roleSQL = "SE

我在类中有以下代码:

    function getRolePerms($role)
    {
        if (is_array($role))
        {
            $roleSQL = "SELECT * FROM `role_perms` WHERE `roleID` IN (" . implode(",",$role) . ") ORDER BY `ID` ASC";
        } else {
            $roleSQL = "SELECT * FROM `role_perms` WHERE `roleID` = " . floatval($role) . " ORDER BY `ID` ASC";
        }
        var_dump($roleSQL);
        $this->database->dbquery($roleSQL);
        $perms = array();
        while($row = $this->database->result->fetch_assoc())
        {
            $pK = strtolower($this->getPermKeyFromID($row['permID']));
            var_dump($pK);
            if ($pK == '') { continue; }
            if ($row['value'] === '1') {
                $hP = true;
            } else {
                $hP = false;
            }
            $perms[$pK] = array('perm' => $pK,'inheritted' => true,'value' => $hP,'Name' => $this->getPermNameFromID($row['permID']),'ID' => $row['permID']);
        }
        return $perms;
    }
$roleSQL的var_dump()是:

SELECT * FROM role_perms WHERE roleID = 1 ORDER BY ID ASC
而$pK:

Admin
当直接在数据库中运行查询时,我得到一个包含8行的结果。 为什么循环不能识别多行。 此外,如果我添加以下语句:

var_dump($this->database->result->fetch_assoc());
它转储第一行的数组,然后循环执行第二行

我真的很困惑


请帮助

罪魁祸首是这一行:

$perms[$pK] = array('perm' => $pK,'inheritted' => true,'value' => $hP,'Name' => $this->getPermNameFromID($row['permID']),'ID' => $row['permID']);
发生的情况是,您期望的所有8行结果都是
$pK=='Admin'
。当您执行
$perms[$pK]=array(…)
时,8次循环迭代中的每一次都会写入相同的数组键。最后,数组中只有一个值

如果你把它改成

$perms[] = array(...);
它应该按预期工作,因为每次迭代都会添加一个具有唯一整数键的新数组元素

旁注:

避免这样做:

$roleSQL = "SELECT * FROM `role_perms` WHERE `roleID` = " . floatval($role) ...

由于
roleID
肯定是一个整数,因此请使用正确的工具执行此任务:
intval($role)

Lol答案实际上不在循环中


调用此函数
$this->getPermKeyFromID($row['permID'])
实际上会覆盖来自数据库的结果,因为它使用的是相同的数据库对象。我通过将结果存储在该循环的一个单独的局部变量中来修复它。

每个$pK值都会不同。此外,循环中还有var_dump(),理论上应该执行8次,但事实并非如此。@FraserK:那么很明显,错误与
$this->database->result
有关,您没有给出它。
$this->database->result
是一个mysqli对象。就像我上面所说的,我可以调用
var\u dump($this->database->result->fetch\u assoc())8次,它将转储8行。但是循环不会像它应该的那样工作,我知道循环应该工作,因为这个代码
while($row=$database->result->fetch_assoc()){print_r($row);}
在另一个页面上工作得非常好。:)@弗雷塞克:里面的
continue
有没有可能在不应该执行的时候被执行?没有,我把它注释掉了,没什么区别