我有一些保存记录的方法,包括用户令牌和电子邮件,如下所示:
public function saveResetToken($email, $resetToken)
{
try {
$conn = Database::getConnection();
// Connect and create the PDO object
$conn->exec('SET CHARACTER SET utf8'); // Sets encoding UTF-8
// Define and prepare an INSERT statement
$sql = 'UPDATE users SET reset_token=:token WHERE email =:email limit 1';
$stmt =$conn->prepare($sql);
// Adds value with bindParam
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':token', $resetToken,PDO::PARAM_STR );
if ($stmt->rowCount()===1){
$conn = null; // Disconnect
return true;
}else{
return false;
}
} catch (PDOException $e) {
include('../views/error.php');
include('../views/admin/includes/footer.php');
exit();
}
}
当我使用print_r $ stmt-> rowCount()时,它返回'1',但是当我在reset_token检查时,我找不到数据。那我的代码有什么问题?
答案 0 :(得分:0)
经过一些调查后,我意识到你问为什么当你期待1
时这个函数为什么会返回true
。当你的函数返回true时,它实际上返回1.所以它将返回1
但如果你if($user->saveResetToken($email, $activation)) print('this is true')
,你可以看到它实际上是评估为真。
试试这个:
function myFunc() {
return true;
}
echo myFunc(); // output: 1
echo myFunc()==true; // output: 1
echo myFunc()==1; // output: 1
echo myFunc()===true; // output: 1
echo myFunc()===1; // output: 1
在php中true
实际上意味着不是零。
以下是文档中被视为false的值:
转换为布尔值时,以下值被视为FALSE:
the boolean FALSE itself the integer 0 (zero) the float 0.0 (zero) the empty string, and the string "0" an array with zero elements an object with zero member variables (PHP 4 only) the special type NULL (including unset variables) SimpleXML objects created from empty tags
查看php docs on booleans了解详情。
至于未保存的记录,您必须使用我的评论中提到的查询->execute()
。