2017-02-12 2 views
-1

Я пытаюсь сделать страницу регистрации с помощью php, а затем, когда я пишу инструкции mysql ниже нее, выиграл Я не согласен с этим, и он выплюнет ошибку, которую я пытаюсь выяснить часами.Ошибка синтаксиса SQL Версия сервера MariaDB для правильного синтаксиса для использования рядом с '@ hotmail.com, Employee)' в строке 1

$query = "INSERT INTO users(username, password,name,surname,email,role)VALUES($username, $password,$name,$lastname,$email,$role)"; 
    $stmt = mysqli_prepare ($dbh, $query) or die(mysqli_error($dbh)); 

Ошибка, которая показывает это:

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MariaDB для правильного синтаксиса, чтобы использовать рядом с «@ hotmail.com, Сотрудник)» в строке 1.

ответ

3

Убедитесь, что вы используете правильные кавычки, если вы вставите строки:

$query = "INSERT INTO users(username, password,name,surname,email,role)VALUES('$username', '$password','$name','$lastname','$email','$role')"; 
0

Вы начинаете использовать подготовленные операторы, но затем вы поворачиваетесь и вставляете переменные непосредственно в запрос - не делайте этого, так как он прямо поражает цель использования prepare(). Вместо этого привяжите свои переменные.

$query = "INSERT INTO users(username, password, name, surname, email, role) VALUES (?, ?, ?, ?, ?)"; 
$stmt = mysqli_prepare($dbh, $query) or die(mysqli_error($dbh)); 
$stmt->bind_param('sssss', $username, $password, $name, $lastname, $email, $role); 
$stmt->execute(); 
$stmt->close(); 

Ваша первоначальная ошибка пришла из-за отсутствия в кавычки строк в запросе, но при использовании подготовленных заявлений с заполнителями, вы не должны его либо.

Если вы использовали mysqli_real_escape_string() для переменных, которые вы вставляете, теперь вы должны удалить это - поскольку эти переменные теперь параметризуются в запросе.

Смотрите ссылки ниже и документация

0

По соображениям безопасности вы не должны использовать переменные внутри запроса.

Вместо этого используйте:

$stmt = mysqli_prepare($link, "INSERT INTO users(username, password,name,surname,email,role)VALUES(?,?,?,?,?,?)"); 
mysqli_stmt_bind_param($stmt, 'ssssss', $password, $name, $surname, $email, $role); 
mysqli_stmt_execute($stmt); 

Посмотрите на PHP-документации:

Смежные вопросы

 Смежные вопросы