Php 返回错误行的数据库查询

Php 返回错误行的数据库查询,php,codeigniter,session,Php,Codeigniter,Session,我正在编写一些web代码,它使用codeigniter和内置的querybuilder访问数据库 我尝试为当前用户从数据库加载数据 $userModel = $this->loadModel('ModelUser'); $name = $this->session->userdata('user'); $user = $userModel->getUser($name); 这是getUser的代码: function getUser($username) { $

我正在编写一些web代码,它使用codeigniter和内置的querybuilder访问数据库

我尝试为当前用户从数据库加载数据

$userModel = $this->loadModel('ModelUser');
$name = $this->session->userdata('user');
$user = $userModel->getUser($name);
这是
getUser
的代码:

function getUser($username)
{
    $this->db->where('username',$username);
    $query = $this->db->get('tblusers',1);
    $res = $query->result();
    if ($query->num_rows() > 0)
    {
        log_message('debug','Got user. ID = '.$res[0]->id);
        foreach($res[0] as $key => $val)
        {
            $this->$key = $val;
        }
        return $this;
    }
    else {
        log_message('info','failed to find user '.$username);
        return NULL;
    }
}
$userModel->getUser("Admin"); //Got user. ID = Admin_ID
$userModel->getUser("john");  //Got user. ID = John_ID
$userModel->getUser("");      //Failed to find user
$userModel->getUser(null);    //Failed to find user
这可以正常工作,除非我让会话过期,在这种情况下,我可以获得另一个用户的详细信息

以下是测试的结果
getUser

function getUser($username)
{
    $this->db->where('username',$username);
    $query = $this->db->get('tblusers',1);
    $res = $query->result();
    if ($query->num_rows() > 0)
    {
        log_message('debug','Got user. ID = '.$res[0]->id);
        foreach($res[0] as $key => $val)
        {
            $this->$key = $val;
        }
        return $this;
    }
    else {
        log_message('info','failed to find user '.$username);
        return NULL;
    }
}
$userModel->getUser("Admin"); //Got user. ID = Admin_ID
$userModel->getUser("john");  //Got user. ID = John_ID
$userModel->getUser("");      //Failed to find user
$userModel->getUser(null);    //Failed to find user
当我以管理员身份登录,然后让会话超时时,最上面的代码段会记录以下消息:

获得了用户。ID=John_ID


我希望
获得用户。ID=Admin\u ID
找不到用户

$this->session->userdata('field')
找不到条目时,它会返回
0
,而不是我测试的
null

日志
$this->db->last\u query()
显示了这一点,因为生成的查询是:

SELECT * FROM tblusers WHERE username = 0 LIMIT 1;
MySQL将自动将字符串转换为整数,其中字符串以整数开头。没有整数的字符串将转换为
0
,如中所述。查询返回它遇到的第一个条目,而没有找到任何行,因为任何不以1-9开头的字符串都将匹配WHERE子句


我在
getUser
中添加了一个子句,如果
$username==''
返回
NULL
。我确实尝试了
==0
,但这产生了相同的错误,因此有一些类型强制正在进行,我不是100%确定,但这比每次调用
getUser
时处理案例更好。

$this->session->userdata('field')
找不到条目时,它返回
0
,而不是我测试的
null

日志
$this->db->last\u query()
显示了这一点,因为生成的查询是:

SELECT * FROM tblusers WHERE username = 0 LIMIT 1;
MySQL将自动将字符串转换为整数,其中字符串以整数开头。没有整数的字符串将转换为
0
,如中所述。查询返回它遇到的第一个条目,而没有找到任何行,因为任何不以1-9开头的字符串都将匹配WHERE子句


我在
getUser
中添加了一个子句,如果
$username==''
返回
NULL
。我确实尝试了
==0
,但这产生了相同的错误,所以有一些类型的强制,我不是100%确定,但是,这比每次调用
getUser
时更好地解决问题。

当会话设置为其他方式时,您可以调用此函数。不要调用此函数,您可以设置消息会话已过期。我了解如何防止此问题,但我不明白原因设置会话时您可以调用此函数其他方面不要调用此函数您可以设置消息会话已过期。我了解如何防止此问题,但我不了解原因