0

在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 循环,但它在这里不起作用。如何在控制器中分别访问这两个值中的每一个?需要一些帮助。

4

2 回答 2

1

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

这将返回您抓取的列的命名散列。它将是一个单元素数组,因此您无需遍历它。

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

于 2013-03-22T22:23:44.783 回答
0

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

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

于 2013-03-22T22:49:09.693 回答