我正在使用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是否以一种不起作用的方式预处理数据库返回?
答案 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