@TerritoryOfPeace
Изучаю php

При попытке записать апостроф в SQL выдает ошибку? Как это исправить?

Понимаю что это происходит в этом моменте:

$mysqli->query("INSERT INTO table
     (data)
    VALUES
    ('$data')
    ");


Как это можно пофиксить?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Учить РНР надо не по написанным нубами при царе Горохе руководствам, а по нормальным учебникам.
Или хотя бы по нормальным ответам на тостере.
https://qna.habr.com/q/918033#answer_1847841

Никакого $data в запросе быть не должно. Любые переменные должны отправляться в БД отдельно
Для этого надо
Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
Привязать переменные к запросу.
Выполнить подготовленный ранее запрос с помощью с помощью execute()

В mysqli это будет так
$sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
$stmt = $link->prepare($sql);
$stmt->bind_param("sssss", $title, $discription, $date, $path);
$stmt->execute();


bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

И тогда никаких ошибок запроса уже никогда не будет. Не говоря уже про инъекции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы