Если я запустил это, я получаю следующую ошибку:
Примечание. Только переменные должны передаваться по ссылке в /var/www/interface/register.php в строке 11 Success
- PDO в Codeigniter - Защита от SQL-инъекций
- PHP MySQL PDO TextArea Где условие с проверкой состояния
- Сколько откат следует писать в транзакции?
- PHP PDO: массив в обновлении SQL Предложение WHERE IN ()
- Symfony2: Как сохранить атрибут сеанса в качестве настраиваемого поля в БД с помощью настраиваемого PdoSessionStorage?
- PDO в проблеме PDO в 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;
Заранее спасибо.
Вы не можете сделать 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);
вопросы: