PHP PDO中的错误更新数据

时间:2017-02-11 20:50:00

标签: php mysql pdo sql-update

好吧,我正在使用带有 PDO 扩展名的PHP作为数据库驱动程序。

我正在修改密码'事情对我来说很糟糕:(

我们(某些 Stackoverflow 帮助,Kudos!)已使用当前密码成功 验证 密码,但我认为它并没有更新数据。

以下是遇到情景
您正在将密码从 quora 更改为 stackoverflow 。我们知道,如果您更改密码,则无法使用旧密码,但在我的情况下,您可以使用旧密码而不是新密码,使新密码 obselete

以下是我的代码片段:

  $option = ['cost' => 12];
  $password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option);

  $selectpasswordsql = "SELECT `password` FROM `auth` WHERE username=?";
  $selectpasswordstmt = $conn->prepare($selectpasswordsql);
  $selectpasswordstmt->execute(array($_SESSION['account']['username']));
  $selectpasswordresults = $selectpasswordstmt->fetch(PDO::FETCH_ASSOC);

  $databasepass = $selectpasswordresults['password'];
  if(password_verify($_currentpassword,$databasepass)){
    if(empty($passmsgs)){
      $updatepasssql = "UPDATE `auth` SET
        `password`=?
      WHERE username=?
      ";
      $updatepassstmt = $conn->prepare($updatepasssql);
      $updatepassstmt->execute(array(password_hash($password, $_SESSION['account']['username']));
      if($updatepassstmt){
        array_push($passmsgs, 'Successfully updating your password!');
      } else {
        array_push($passmsgs, 'There was a problem executing your command!');
      }
    }
  } else {
    array_push($passmsgs, 'Your current password is wrong!');
  }

1 个答案:

答案 0 :(得分:1)

首先,请确保您可以通过在页面顶部添加以下行来查看错误。

error_reporting(E_ALL);
ini_set("display_errors", 1);

以下代码包含逻辑和语法错误。

$updatepassstmt->execute(array(password_hash($password, $_SESSION['account']['username']));
if($updatepassstmt){
  • 您尝试重新哈希$ _currentpassword哈希值的$ password值。 (请明确定义新的密码变量。)
  • 您尚未正确关闭password_hash()函数。 ($ _SESSION ['帐户'] ['用户名']作为第二个参数传递。)
  • 你不检查执行返回bool的execute()结果。您需要检查它,否则您将始终获得成功消息,因为$ updatepassstmt将是成功的prepare()调用上的PDOStatement对象。

我建议您像这样转换代码逻辑:

...
$updatepassstmt = $conn->prepare($updatepasssql);

$new_hashed_password = password_hash($_POST['new_password'], PASSWORD_BCRYPT, $option); // replace $_POST['new_password'] with the correct one.

$result = $updatepassstmt->execute($new_hashed_password, $_SESSION['account']['username']);

if ($result){
...etc...