Я получил:
Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '5538ac14bb2ca7514f9f4d8826f3c45e'')' в строке 1' в C:\xampp\htdocs\register.php:19 Трассировка стека: #0 C:\xampp\ htdocs\register.php(19): PDO->exec('insert in use...') #1 {main} добавлено в C:\xampp\htdocs\register.php в строке 19.
Как это решить, что делать?
<?php
session_start();
// If the form has been submitted
if (isset($_POST['submitted'])){
// Create a database connection
$db = new PDO("mysql:dbname=johnsoa7_db;host=localhost", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Get and sanitise the inputs, we don't need to do
// this with the password as we hash it anyway
$safe_forename = $db->quote($_POST['forename']);
$safe_lastname = $db->quote($_POST['lastname']);
$safe_email = $db->quote($_POST['email']);
$hashed_password = $db->quote(md5($_POST['password']));
// Insert the entry into the database
$query = "insert into users values (default, $safe_forename, $safe_lastname, $safe_email, '$hashed_password')";
$db->exec($query);
// Get the ID
$id = $db->lastInsertId();
// Output success or the errors
echo "Congratulations! You are now registered. Your ID is: $id";
}
?>
PDO::quote()
] для построения операторов SQL, настоятельно рекомендуется использоватьPDO::prepare()
для подготовки операторов SQL с привязанными параметрами вместо использованияPDO::quote()
для интерполяции пользовательского ввода в оператор SQL. Подготовленные операторы со связанными параметрами не только более переносимы, удобнее, невосприимчивы к SQL-инъекциям, но и часто намного быстрее выполняются, чем интерполированные запросы, поскольку и сервер, и клиент могут кэшировать скомпилированную форму запроса. - person ceejayoz   schedule 30.03.2017