PHP如果语句返回false MySQL布尔列返回


PHP If statement returns false on MySQL boolean column return

我正在使用CodeIgniter框架。我在我的网站的用户认证部分工作。在MySQL数据库的"users"表中,我有一个列,我将其声明为布尔值(我知道它实际上是一个TINYINT(1)),称为"verified",表示用户的电子邮件地址是否已经过验证。当我尝试测试这个列的值时,我的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预处理数据库返回的方式会使这不起作用吗?

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

if($row['verified'])

谢谢大家的帮助

尝试在if子句中使用empty()函数:

if(!empty($row['verified'])){
     $this->session->set_userdata([
         'name' => $row['name'],
         'email' => $email,
         'login_time' => time(),
         'last_activity' => time(),
         'session_valid' => TRUE
     ]);
     return true;
}