我知道这样的答案写了无数的时间,但老实说,花了大约4个小时后,我似乎找不到什么错。我的PDO更新未更新。它在几天前工作,也许我已经改变了一些东西,但现在根本不起作用。
try {
$query_update = $db->db_connection->prepare('UPDATE ghl_users SET user_last_reset_code = :user_password_reset_hash,
user_last_reset_request = :user_password_reset_timestamp
WHERE user_name = :user_name');
$query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, PDO::PARAM_STR);
$query_update->bindValue(':user_password_reset_timestamp', $temporary_timestamp, PDO::PARAM_STR);
$query_update->bindValue(':user_name', $user_name, PDO::PARAM_STR);
$query_update->execute();
}catch( PDOException $Exception ) {
throw new MyDatabaseException( $Exception->getMessage( ) , (int)$Exception->getCode( ) );
}
设置所有变量(例如,当我回显它时显示值)
echo $user_name. "<br />";
echo $temporary_timestamp. "<br />";
echo $user_password_reset_hash. "<br />";
值为:
johndoe
2015-06-04 09:28:29
8ctkas9f3ef35jdk2k5jaeffe115j3kkdc2ae
答案 0 :(得分:1)
您只需参数化不安全的值$user_password_reset_hash
即可停止注射。您可以使用SQL NOW()
来更新
尝试
try {
$query_update = $db->db_connection->prepare('UPDATE ghl_users
SET user_last_reset_code = :user_password_reset_hash,
user_last_reset_request = NOW()
WHERE user_name = :user_name');
$query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, PDO::PARAM_STR);
$query_update->bindValue(':user_name', $user_name, PDO::PARAM_STR);
if ($query_update->execute())
{
// success
echo "Updated record";
}
else
{
// failure
}
}catch( PDOException $Exception ) {
throw new MyDatabaseException( $Exception->getMessage( ) , (int)$Exception->getCode( ) );
}
另外
确保ERRMODE_EXCEPTION
已设置