Saleh Mohammad Aria Ответов: 2

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашему серверу mariadb


ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE id = '7'' at line 1


Мой код:

<?php include "db.php";?>
<?php include "functions.php"; ?>

<?php

if(isset($_POST['submit'])){
    
    $username = $_POST['username'];
    $password = $_POST['password'];
    $id = $_POST['id'];
    
    $query = "UPDATE users SET username = '$username', password = '$password', WHERE id = '$id' ";
    
    $result = mysqli_query($connection, $query);
if(!$result){
    die("ERROR".mysqli_error($connection));
}
}


Что я уже пробовал:

Я перепробовал много советов в интернете, но не смог решить эту ошибку.

2 Ответов

Рейтинг:
19

Wendelius

Кажется, у вас есть лишняя запятая в конце строки. SET пункт. Уберите запятую перед этим WHERE

Кроме того, это очень плохая идея-хранить пароль в виде обычного текста. Вы должны использовать один из способов хэширования, чтобы гарантировать, что пароли остаются в безопасности. Взгляните на это Хранение паролей: как это сделать.[^]


Saleh Mohammad Aria

Большое спасибо!

Wendelius

Всегда пожалуйста!

Richard Deeming

Поскольку вы используете PHP, довольно легко исправить ваше хранилище паролей. Воспользуйся хэш пароля[^] когда пользователь регистрируется, и функцию password_verify[^] когда они войдут в систему. Это позаботится о создании и проверке безопасного соленого хэша пароля для вас.

Wendelius

Хорошая информация, спасибо!

Рейтинг:
1

Patrice T

$query = "UPDATE users SET username = '$username', password = '$password' WHERE id = '$id' ";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Saleh Mohammad Aria

Спасибо, это мне очень помогло!

Patrice T

Всегда пожалуйста!