password_hash giving error: Strict standards: Only variables should be passed by reference
password_hash giving error: Strict standards: Only variables should be passed by reference
编辑:我的问题已经解决。我不知道或想到 bindValue(),这就是为什么我不认为这是一个重复的问题。感谢您的帮助!
我正在学习如何使用 PHP 注册用户,似乎 password_hash 给我 "Only Variables should be passed by reference" 错误消息。我见过很多人有同样的错误,但它似乎不适用于我的情况(在我看来)。
正在连接到数据库
$server = 'localhost';
$username ='root';
$password ='root';
$database = 'register_test';
try{
$conn = new PDO("mysql:host=$server;dbname=$database;" , $username, $password);
} catch(PDOException $e){
die ("Connection failed" . $e->getMessage());
}
注册用户
require 'database.php';
if(!empty($_POST['email']) && !empty($_POST['password'])):
$pass = $_POST['password'];
$email = $_POST['email'];
$sql = "Insert into user (email, password) values (:email, :password)";
$stmt = $conn->prepare($sql);
$stmt ->bindParam(':email', $email);
$stmt ->bindParam(':password', password_hash($pass, PASSWORD_BCRYPT)); //error showns here
if($stmt -> execute() ):
die('Success');
else:
die('Fail');
endif;
endif;
如果你们需要更多信息,请告诉我。
使用PDOStatement::bindValue()
instead of PDOStatement::bindParam()
.
来自文档:
Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
因此,您的代码变为:
$stmt->bindValue(':email', $email);
$stmt->bindValue(':password', password_hash($pass, PASSWORD_BCRYPT));
当启用 E_STRICT
模式时,函数的结果不能通过引用传递,而不触发警告。通过使用 bindValue()
代替,我们基本上将函数的 return 值作为副本传递。
编辑:我的问题已经解决。我不知道或想到 bindValue(),这就是为什么我不认为这是一个重复的问题。感谢您的帮助!
我正在学习如何使用 PHP 注册用户,似乎 password_hash 给我 "Only Variables should be passed by reference" 错误消息。我见过很多人有同样的错误,但它似乎不适用于我的情况(在我看来)。
正在连接到数据库
$server = 'localhost';
$username ='root';
$password ='root';
$database = 'register_test';
try{
$conn = new PDO("mysql:host=$server;dbname=$database;" , $username, $password);
} catch(PDOException $e){
die ("Connection failed" . $e->getMessage());
}
注册用户
require 'database.php';
if(!empty($_POST['email']) && !empty($_POST['password'])):
$pass = $_POST['password'];
$email = $_POST['email'];
$sql = "Insert into user (email, password) values (:email, :password)";
$stmt = $conn->prepare($sql);
$stmt ->bindParam(':email', $email);
$stmt ->bindParam(':password', password_hash($pass, PASSWORD_BCRYPT)); //error showns here
if($stmt -> execute() ):
die('Success');
else:
die('Fail');
endif;
endif;
如果你们需要更多信息,请告诉我。
使用PDOStatement::bindValue()
instead of PDOStatement::bindParam()
.
来自文档:
Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
因此,您的代码变为:
$stmt->bindValue(':email', $email);
$stmt->bindValue(':password', password_hash($pass, PASSWORD_BCRYPT));
当启用 E_STRICT
模式时,函数的结果不能通过引用传递,而不触发警告。通过使用 bindValue()
代替,我们基本上将函数的 return 值作为副本传递。