Member 13435586 Ответов: 1

У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера mariadb, чтобы найти правильный синтаксис для использования рядом .. В строке 1


Я пытаюсь обновить таблицу в базе данных с помощью php, но это дает ошибку mysql, упомянутую выше.

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

$conn = new mysqli(Host,Username,Password,Database);
    
    $que="UPDATE `spare_parts` SET 
 `item_name`='$item_name', `brand`='$brand',
`buy_p`='$buy_r',
`sale_p`='$sale_r',
`qty`='$qty'
 WHERE `id`='$id' LIMIT 1";
        
    if($conn->query($que))
    {
        $msg = 'alert("Record updated successfully");';
    }
        else
        {
             $msg= $conn->error;
    }

Richard MacCutchan

Я подозреваю, что использование обратных кавычек не является правильным. Проверьте документацию, чтобы быть уверенным.

Member 13435586

Это не проблема, потому что она работает для других записей, но не работает для некоторых записей, это одна из них

1 Ответов

Рейтинг:
2

OriginalGriff

Наверное, все дело в данных. Если какие - либо данные содержат символ кавычки - "свекла Мэри", возможно, - это завершит ввод, и оставшиеся данные будут использоваться в качестве инструкций SQL. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку с точки зрения SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x'; DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Видеть здесь: РНР: Подготовленные инструкции и хранимые процедуры-руководство пользователя[^]


Member 13435586

Как я могу использовать "PHP: подготовленные операторы" для запроса обновления? пожалуйста, приведите пример кода

OriginalGriff

Переходите по ссылке, Читайте и учитесь.

Member 13435586

Сэр я использовал его как но он не работает когда я нажимаю кнопку обновления экран очищается
$stmt = $conn - & gt;prepare ("UPDATE spare_parts SET qty = ? Где id = ? ");
$stmt - > bindParam('ss', $qty,$id);
$stmt - & gt; выполнить();
$result = $stmt- & gt;get_result();

if ($result)
{
$msg = ' alert ("запись успешно обновлена");';
}