Php 运行查询时无法从数据库检索用户信息,codeigniter
我有一个问题,应该很简单,但我似乎无法解决它。我试图通过搜索数据库中的用户名从用户那里获取用户id。但我只是得到一个空值。。请让我知道我可能做错了什么 以下是查询的代码:Php 运行查询时无法从数据库检索用户信息,codeigniter,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个问题,应该很简单,但我似乎无法解决它。我试图通过搜索数据库中的用户名从用户那里获取用户id。但我只是得到一个空值。。请让我知道我可能做错了什么 以下是查询的代码: private function get_u_id($user){ $sql = "SELECT * FROM users WHERE 'username'=?"; $query = $this->db->query($sql, array($user)); foreach($query-&
private function get_u_id($user){
$sql = "SELECT * FROM users WHERE 'username'=?";
$query = $this->db->query($sql, array($user));
foreach($query->result as $row){
return $row['id'];
}
}
$sql = "SELECT * FROM users WHERE 'username'=?";
^-- ^--
我将此信息存储在会话中,下面是代码:
$user_session_data = array(
'user'=>$p_info['username'],
'email' => $this->get_user_email($p_info['username']),
'u_id' => $this->get_u_id($p_info['username']),
'validated' => TRUE
);
//set a session, (username, email, user_id)
private function set_session($user_data) {
$this->session->set_userdata($user_data);
}
当我使用print\u r()输出这个会话时,它看起来是这样的
[user_data] => [user] => wilprim [email] => [u_id] => [validated] => 1
您还可以尝试使用CI的active record类来实现所需的功能,但方法要简单得多,例如:
private function get_u_id($user){
$query = $this->db->select('id')->from('users')->where('username', $user)->limit(1)->get();
return $query->num_rows() > 0 ? $query->row()->id : 0;
}
法律顾问:@您的示例中的cipherous:
它是
$query->result()
(返回对象数组)或$query->result\u数组()
(返回数组数组)而不是$query->result
如果您想要一行,您将使用
$query->row()
(对象)和$query->row\u array()
(数组),而不必在其上循环。查询中的引号不正确:
private function get_u_id($user){
$sql = "SELECT * FROM users WHERE 'username'=?";
$query = $this->db->query($sql, array($user));
foreach($query->result as $row){
return $row['id'];
}
}
$sql = "SELECT * FROM users WHERE 'username'=?";
^-- ^--
“用户名”
是一个字符串,而不是字段名username
也不是保留字,因此绝对不需要引用它
用户可选择以下任一项:
$sql = "SELECT * FROM users WHERE `username`=?"; // note the backticks
$sql = "SELECT * FROM users WHERE username=?"; // no quotes at all
如前所述,您的查询将返回任何数据的唯一方式是,如果您有一个用户的用户名实际上是
username
非常低效的,运行两个查询从同一记录中背靠背地获取两个不同的字段。你最好做一个选择id,发邮件给…
下次,请解释你的答案。简单地粘贴代码不是StackOverflow或任何SE站点的正确格式。真的,我认为代码是不言自明的;)我给出了一个解决方案,我不需要解释。一个伟大的答案在你之上。我很抱歉,如果你认为你的质量已经足够了,但是对于那些从谷歌来的有同样问题的人来说,他们看到一个与他们的代码库不相关的代码块,他们不知道会发生什么,我只是尝试了一下,仍然没有u_id。。我想这一定与正在搜索的用户名有关,这很奇怪,因为在会话中设置得很好……我是否正确地执行了foreach,并正确地返回了值?您可能希望重新设计一个通用的“getUserInfo”函数,而不是每个字段都有一个函数。返回几个额外的/不需要的字段将比必须对每个字段运行一个查询具有更低的开销。但除此之外,你所做的一切都很好。只需修复查询语法。最终在生成getUserInfo()函数时得到它!谢谢