为什么不是PHP" password_hash"返回一个字符串?

时间:2014-04-15 01:19:50

标签: php php-password-hash

<?php
    $connection=new PDO("mysql:host=localhost;dbname=userdata", "secure_credentials", "battery_staple");
    $user=$_POST['username1'];
    $pass=$_POST['password1'];
    $snip=mb_substr($user, 0, 3);
    $pass=password_hash($pass, PASSWORD_BCRYPT);
    $user_query=$connection->prepare("INSERT INTO login (email, password, semod, snippet) VALUES (:email, :password, :semod, :snippet)");
    $user_query->bindParam(':email', $user);
    $user_query->bindParam(':password', $pass);
    $user_query->bindParam(':semod', "false");
    $user_query->bindParam(':snippet', $snip);
    $user_query->execute;

(密码已更改)

我遇到上述PHP代码的小问题,无论何时执行我都会收到此错误:

  

致命错误:无法通过引用传递参数2 [位置] 在线 [##:我缩短了上述代码...它是&#39; s有问题的密码字段]

环顾四周,这似乎是直接传递字符串/整数 而不使用变量的问题。但是,password_hash()返回一个字符串,所以我被认为它没有返回一个字符串。这个问题可能是什么问题?

1 个答案:

答案 0 :(得分:5)

您的错误就在这一行:

$user_query->bindParam(':semod', "false");

您需要使用bindValue

$user_query->bindValue(':semod', "false");

bindParam通过引用传递第二个参数,因此它必须是变量,而不是文字。

此外,不需要绑定已知值。您可以轻松地将文字'false'字符串添加到语句查询中,即

"INSERT INTO login (email, password, semod, snippet) VALUES (:email, :password, 'false', :snippet)"