533578 Ответов: 1

Мне нужна помощь с синтаксической ошибкой SQL.


У меня есть php-код, который должен обновить данные из базы данных, но он дает мне такую ошибку: описание ошибки:у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MariaDB для правильного синтаксиса для использования рядом " в строке 1

Это мой код.:
<pre><?php
//initialize variables
$Pand =" ";
$Naam =" ";
$Email =" ";
$Huisnummer =" ";
$Deel =" ";
$id = 0;

// connect to database
$db = mysqli_connect("xxx","xxx","xxx","xxx");
//update records
if (isset($_POST['aanpassen'])) {
    $Naam = mysqli_real_escape_string($_POST["Naam"]);
    $Email = mysqli_real_escape_string($_POST["Email"]);
    $Pand = mysqli_real_escape_string($_POST["Pand"]);
    $Huisnummer = mysqli_real_escape_string($_POST["Huisnummer"]);
    $Deel = mysqli_real_escape_string($_POST["Deel"]);
    $id = mysqli_real_escape_string($_POST["id"]);
    
    if (!mysqli_query($db,"UPDATE Info SET Naam= '$Naam' , Email= '$Email' , Pand= '$Pand' , Huisnummer= '$Huisnummer' , Deel= '$Deel' WHERE id=$id")){
    echo("Error description:". mysqli_error($db));
    }
    header('location: overzichtlocatie.php');
}
// retrieve records
$results = mysqli_query($db, "SELECT *  FROM Info");
?>


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

Я уже пробовал такой код:
<pre>
<?php
// connect to database
$db = mysqli_connect("xxx","xxx","xxx","xxx");
//update records
if (isset($_POST['aanpassen'])) {
    $Naam = mysqli_real_escape_string($_POST["Naam"]);
    $Email = mysqli_real_escape_string($_POST["Email"]);
    $Pand = mysqli_real_escape_string($_POST["Pand"]);
    $Huisnummer = mysqli_real_escape_string($_POST["Huisnummer"]);
    $Deel = mysqli_real_escape_string($_POST["Deel"]);
    $id = mysqli_real_escape_string($_POST["id"]);

    if (!mysqli_query($db,"UPDATE Info SET Naam= '$Naam' , Email= '$Email' , Pand= '$Pand' , Huisnummer= '$Huisnummer' , Deel= '$Deel' WHERE id=$id")){
    echo("Error description:". mysqli_error($db));
    }
    header('location: overzichtlocatie.php');
}
// retrieve records

?>

Richard Deeming

Во-первых, функции "escape string" на самом деле не являются адекватной защитой от SQL-инъекций. Вместо этого следует использовать подготовленные операторы с параметрами.

PHP: SQL-инъекция - руководство пользователя[^]

533578

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

phil.o

Пожалуйста, используйте зеленый виджет "улучшить вопрос" и квалифицируйте его с помощью подготовленной версии заявления.

Richard Deeming

Во-вторых, вы храните пароли в виде обычного текста. Не делай этого.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]

PHP даже имеет встроенные функции, которые помогут вам сделать все правильно:
PHP: password_hash[^]
РНР: функцию password_verify[^]

533578

Он сделан только для меня и моего учителя. Потому что это для школьного проекта ;)

phil.o

Это не мешает вам делать все правильно :)

533578

Правда, но я только начинаю работать с php, поэтому мне нужно многому научиться. И школа дала мне этот приказ, и никто не может мне помочь, потому что все школы закрыты. Теперь мне нужно спросить людей на таких сайтах, как этот. И я уже 2 дня застрял с этой ошибкой :(

ZurdoDev

Скорее всего, у вас есть ' в одном из ваших полей, вызывающих разрыв вашего sql-оператора. Я не занимаюсь php и mysql, но у w3schools есть хорошая статья о том, как это сделать.

https://www.w3schools.com/php/php_mysql_prepared_statements.asp

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
Мне нужна помощь с синтаксической ошибкой SQL.

1 из ваших проблем заключается в том, что вы не можете знать, что такое запрос.
Я бы начал с замены
if (!mysqli_query($db,"UPDATE Info SET Naam= '$Naam' , Email= '$Email' , Pand= '$Pand' , Huisnummer= '$Huisnummer' , Deel= '$Deel' WHERE id=$id")){

чем-то вроде
$Query= "UPDATE Info SET Naam= '$Naam' , Email= '$Email' , Pand= '$Pand' , Huisnummer= '$Huisnummer' , Deel= '$Deel' WHERE id=$id";
if (!mysqli_query($db,$Query)){

Это небольшое изменение позволит вам распечатать $Query или проверить его с помощью отладчика. Таким образом, вы можете узнать, что было вашим настоящим запросом.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

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

Обратная сторона этого решения:
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

phpdbg | php отладчик[^]
Методы отладки для PHP-программистов[^]

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


533578

Я попробовал ваш код, и он все еще выдает мне ту же ошибку.

Patrice T

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