Phpmyadmin и php. Ошибка в запросе к БД
Делаю парсинг сайта. Создал скрипт, задачи которого: спарсить названия, описания и изображения с сайта о рыбалке, а также создать записи в базе данных. Частично скрипт работает: изображения скачиваются, база данных заполняется. Но, по-видимому есть какая-то ошибка в коде, из-за которой скрипт останавливает свою работу и до конца не скачивает контент. В браузере выводится следующее: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'северной широты рыба судак встречается ред�' at line 1
В скрипте я делаю такой запрос к базе данных:
if(empty($data)){
$query="INSERT INTO content2 SET name='".$name."', text='".$text."',img = 'image/".$filename.".jpg', data=NOW() ";
mysqli_query($link,$query)or die(mysqli_error($link));
}
Скажите, пожалуйста, где и в чём ошибка?
Ответы (1 шт):
Нельзя так формировать запрос. Переменные, передаваемые в запрос - нужно предварительно "экранировать". Текстовые значения - 100%. Вот пример функции, которая поможет: mysqli_real_escape_string
Вообще, по-хорошему, для предотвращения SQL-инжекта - лучше использовать
$pdo->prepare()
по типу:
$stmt = $pdo->prepare(
'SELECT * FROM blog_posts WHERE YEAR(created) = ? AND MONTH(created) = ?'
);
if ($stmt->execute([$_GET['year'], $_GET['month']])) {
$posts = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
Тогда и ничего esc-апить не придется в добавок. Вот тут по этой теме целая статья.