PDO错误/通知中的哈希密码

时间:2016-07-19 15:26:02

标签: php pdo bindparam

如果我运行此操作,我会收到以下错误:

  

注意:在第11行的/var/www/interface/register.php中,只能通过引用传递变量       成功

我不知道如何解决这个问题。它仍然是成功的,数据在数据库中散列,但我不想要这个通知。

$sql = " INSERT INTO users (username, password) VALUES (:username, :password)";
    $stmt = $conn->prepare($sql);

    $stmt->bindParam(':username', $_POST['username']);
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));


    if ($stmt->execute()) :
        die('Success');
    else:
        die('Fail');
    endif;

提前致谢。

1 个答案:

答案 0 :(得分:1)

你不能在bindParam内执行password_hash($ _ POST ['密码'],PASSWORD_BCRYPT),因为password_hash返回一个字符串,执行:

$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$stmt->bindParam(':password', $password);

如果您希望保留值,请使用bindValue

$stmt->bindValue(':username', $_POST['username']);
$stmt->bindValue(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));

因为它允许通过引用变量。

说明:

bindParam 期望变量或const它不能是一个原始类型,如字符串或int,...,显式(例如:" some_hardcoded_string" )它也不能是返回这种类型之一的函数。

bindValue 可以接收引用和基本类型作为参数。

两者的例子:

$query->bindParam(':user', $user, PDO::PARAM_STR);

$query->bindValue(':pass', sha1($password), PDO::PARAM_STR);

SHA1返回一个值,它可以是一个数字12345(为了示例,让我们说)

$query->bindValue(':pass', 12345, PDO::PARAM_STR); 

或字符串。

$query->bindValue(':pass', 'hashed_password', PDO::PARAM_STR);

遗留问题: