我正在使用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;
}