迭代Codeigniter控制器中的数组元素

时间:2013-03-22 22:19:29

标签: codeigniter

在php中,当我们编写并执行查询时,我们使用while循环来迭代

$sql  = "SELECT username, role FROM studentlogin WHERE username = '$username' and password = '$password'";
        $res = mysql_query($sql);

            while($row = mysql_fetch_array($res, MYSQL_NUM)){
                   $uname = $row[0];
                   $stud_role = $row[1];
            }

然后我们在代码中的某处使用变量$ uname和$ stud_role。我尝试在codeigniter中做类似的事情,但它失败了。

function studentlogin($username, $password)
    {

        $query = "SELECT username, role FROM studentlogin WHERE username = ? and password = ?";
        $result = $this->db->query($query, array($username, $password));

        if($result->num_rows() == 1)
        {               
            return $result;
        }

        else
        {
            return false;
        }
    }

我从控制器调用此函数如下

$data['info'] = $this->student_model->stdentlogin($username, $password);

这就是问题所在。我尝试使用与上面相同的while循环,但它在这里不起作用。如何在控制器中分别访问这两个值中的每一个?需要一些帮助。

2 个答案:

答案 0 :(得分:1)

返回$ result-> row_array();而不是返回$ result。

这将返回您抓取的列的命名哈希值。它将是一个单个元素数组,因此您不需要循环它。

有关在codeigniter中获取数据库数据的更多信息,请查看database class information

答案 1 :(得分:0)

while()在处理循环时计算表达式。如果表达式求值为TRUE,则循环继续。如果是FALSE,则会停止。这不是最好的地方。 (顺便说一句,mysql_*函数在PHP中已被弃用,所以我真的建议忽略它们的工作原理。

CI Database user guide有许多方便的示例和有关如何从数据库中检索数据的信息。在您的情况下,如果您要检索单行,则应使用$result->row()$result->row_array(),前者将返回stdClass个对象,后者将返回关联数组。