在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循环,但它在这里不起作用。如何在控制器中分别访问这两个值中的每一个?需要一些帮助。
答案 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
个对象,后者将返回关联数组。