MySQL查询运行没有错误但不填充数据库

时间:2013-10-06 18:15:38

标签: mysql insert

晚上的人,

让其他人“看着这个太久的时刻”。

这段代码在运行时返回成功消息,但没有任何内容输入到数据库表中,没有错误被抛出,我知道所有正确的值都是从_post收到但是我看不出有什么问题,我差不多了在另一个页面上的相同查询,它工作正常。

任何人都可以看到代码问题吗?

if (isset($_POST['username']) && $_POST['username'] !== '')
{

    $salted = md5($_POST['pass1'] . 'salt');

  try
  {
    $sql = 'INSERT INTO users SET 
      username = :username,
      firstname = :firstname,
      lastname = :lastname,
      email = :email,
      password = $salted,
      joined = CURDATE()';
    $s = $PDO->prepare($sql);
    $s -> bindValue(':username', $_POST['username']);
    $s -> bindValue(':firstname', $_POST['firstname']);
    $s -> bindValue(':lastname', $_POST['lastname']);
    $s -> bindValue(':email', $_POST['email']);
    $s -> execute();

  }
  catch (PDOException $e)
  {
    $error = 'Error adding submitted user.';
    echo $error;
    exit();
  }

  ?> <div class="alert alert-success">User added to the database.</div> <?php

}

1 个答案:

答案 0 :(得分:1)

总结这里的评论,为了得到答案。标记社区维基。

  • 应引用INSERT语句中的字符串。

      password = '$salted',
    
  • 无论如何你应该使用一个参数。

      password = :password,
    
      . . .
    
      $s -> bindValue(':password', $salted);
    
  • MD5不是现代强密码存储的首选散列函数。 SHA1也不是。
    尝试使用SHA256或Bcrypt。

    $salted = hash('sha256', $_POST['pass1'] . 'salt');
    
  • 如果您为每个用户使用随机盐字符串,则Salting会更好。

  • 确保您的PDO实例为configured to throw exceptions

    $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
  • 始终捕获PDO异常的错误消息,即使您没有将其输出给用户。

    error_log($e->getMessage());