Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 运行查询时无法从数据库检索用户信息,codeigniter_Php_Mysql_Codeigniter - Fatal编程技术网

Php 运行查询时无法从数据库检索用户信息,codeigniter

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-&

我有一个问题,应该很简单,但我似乎无法解决它。我试图通过搜索数据库中的用户名从用户那里获取用户id。但我只是得到一个空值。。请让我知道我可能做错了什么

以下是查询的代码:

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()函数时得到它!谢谢