PHP If语句在MySQL布尔列返回时返回false

时间:2015-07-26 22:30:22

标签: php mysql codeigniter if-statement boolean

我正在使用CodeIgniter框架。我正在研究我网站的用户身份验证部分。在我的MySQL数据库的'users'表中,我有一个我声明为BOOLEAN的列(我知道它确实是一个TINYINT(1)),称为'已验证',表示用户的电子邮件地址是否已经过验证。当我尝试测试此列的值时,我的IF语句总是求值为FALSE,即使我知道该值为1.这是我的代码的片段:

public function authenticate_user(){
    $pw = hash('sha512', $this->salt1 . $this->input->post('password') . $this->salt2);
    $email = $this->input->post('email');

    $query = $this->db->get_where('users', ['email' => $email, 'password' => $pw]);
    if($query->num_rows() == 1){
        $row = $query->row_array();
        //die("verified = ".$row['verified']); <-This line shows 'verified = 1' consistently when uncommented.
        if($row['verified'] == 1){
            $this->session->set_userdata([
            'name' => $row['name'],
            'email' => $email,
            'login_time' => time(),
            'last_activity' => time(),
            'session_valid' => TRUE
            ]);
            return true;
        }
        else return 'unverified';
    }
    else return false;
}

当凭据正确时,此函数始终返回“未验证”且未设置会话变量。凭证不正确时,该功能表现出正确的行为。我已经在phpMyAdmin中确认该列是1,并且我已经确认通过取消注释上面的die()语句从数据库返回1。我尝试使用true和'1'(字符串)代替整数1并得到相同的结果。难道我做错了什么? CodeIgniter是否以一种不起作用的方式预处理数据库返回?

2 个答案:

答案 0 :(得分:0)

@Sean,你的建议有效。我不确定为什么PHP的评估方式与使用==运算符的方式不同。它的工作方式是:

if($row['verified'])

谢谢你的帮助。

答案 1 :(得分:0)

尝试使用$string = cell date to here; $new_string = str_replace('replace', 'with', $string); echo "{$string}<br>{$new_string}"; // commented until new strings visually compared. #mysqli_query("update table set `items` = {$new_string} WHERE `id` = {$id}"); 子句中的empty()函数:

if