Хэш-пароль в PDO Ошибка / Уведомление

Если я запустил это, я получаю следующую ошибку:

Примечание. Только переменные должны передаваться по ссылке в /var/www/interface/register.php в строке 11 Success

Я не знаю, как это исправить. Он все еще успешный и данные хэшируются в базе данных, но я не хочу этого уведомления.

$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; 

Заранее спасибо.

Solutions Collecting From Web of "Хэш-пароль в PDO Ошибка / Уведомление"

Вы не можете сделать password_hash ($ _ POST ['password'], PASSWORD_BCRYPT) внутри bindParam , потому что password_hash возвращает строку, do:

 $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, …, явно (ex: "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); 

вопросы:

  • Строгие стандарты: только переменные должны передаваться по ссылке в m_auth
  • PDO проходит по ссылке?
  • Строгие стандарты: только переменные должны передаваться по ссылке