Чи не працює sql-запит

Чи не працює SQL-запит

Відео: PHP для початківців | # 13 Підключення до БД і перший SQL-запит

У цій статті мова піде про одну з найпоширеніших причин, чому не працює SQL-запит. Ми зараз не беремо до уваги "випадкові помилки". Тут йде мова про передачу даних їх через форму і використовувались наступного разу в SQL-запитах, які іноді чомусь не працюють.

Припустимо, що Ви робите коментування у себе на сайті. І Ви хочете, щоб користувач мав право вводити будь-які символи, навіть лапки, зворотні слеші та інше. Запропонуємо приблизний вигляд Вашого запиту на вставку нового запису в таблицю коментарів:

INSERT INTO `mysite_comments`(`name`,`comment`) VALUES (`$ Name`,`$ Comment`)

Тепер давайте підставимо в цей SQL-запит реальні дані, припустимо, name буде Михайло, а comment буде тестування.

INSERT INTO `mysite_comments`(`name`,`comment`) VALUES (`Михайло`,`Тестування`)

Як Ви думаєте, чи спрацює такий запит? Безумовно, він буде прекрасно працювати. Але що якщо хто-небудь введе name Михайло, а comment Мій `коментар:

INSERT INTO `mysite_comments`(`name`,`comment`) VALUES (`Михайло`,`Мій`коментар`)


Як Ви розумієте, даний SQL-запиту не буде виконаний. І ось тепер розповім про вирішенні цієї проблеми.

Необхідно будь-які змінні, які використовуються в SQL-запитах, пропускати через функції addslashes (). Дані функція займається екрануванням наступних спецсимволов: одинарна лапка, зворотна лапки, лапки і зворотний слеш.




Таким чином, якщо ми зробимо так:

$ name = addslashes($ name) -
$ comment
= addslashes($ comment) -

те наш SQL-запит стане таким:

Відео: Курс по SQL. Внутрішнє об`єднання таблиць в базах даних SQLite: SQL запит SELECT INNER JOIN

INSERT INTO `mysite_comments`(`name`,`comment`) VALUES (`Михайло`,`Мій ` коментар `)

І ось цей SQL-запит вже виконається без проблем.

Відео: Як працює рекурсія? Ієрархічні / рекурсивні SQL запити в базах даних SQLite: WITH RECURSIVE

І ще один момент, про який часто забувається. Будь-які вхідні дані треба обов`язково пропускати через функцію htmlspecialchars (), за винятком окремих випадків. Ця функція позбавить Вас від заливки в базу HTML-коду.

Щоб зрозуміти важливість функції htmlspecialchars () давайте розберемо простий приклад, пов`язаний з тими ж коментарями. Якщо користувач матиме право передавати HTML-код (А він це права завжди має), який згодом не буде ніяк оброблений, то при виведенні коментаря на сторінку цей код буде виконаний. Найпростіший приклад - це зробити редирект на jаvascript на сайт зловмисника. Таким чином, будь-який, хто зайде на сторінку з цим коментарем, буде миттєво відправлений на інший сайт.

Підіб`ємо невеликий підсумок. завжди використовуйте функцію htmlspecialchars () для всіх вхідних даних, за винятком самих рідкісних випадків. І завжди використовуйте функцію addslashes () для кожної змінної, яка бере участь в SQL-запитах.

Поділися в соціальних мережах:

Схожі
Як дізнатися синтаксис sql-запиту через phpmyadminЯк дізнатися синтаксис sql-запиту через phpmyadmin
Реалізація пошуку на сайті через phpРеалізація пошуку на сайті через php
Як зробити коментування на сайтіЯк зробити коментування на сайті
Запит sql для сортування результату вибіркиЗапит sql для сортування результату вибірки
Коментарі у вигляді бульбашки.Коментарі у вигляді бульбашки.
Команда doskey - редагування і повторний виклик команд windows- створення макросів doskey.Команда doskey - редагування і повторний виклик команд windows- створення макросів doskey.
Як знайти помилку в sql-запитіЯк знайти помилку в sql-запиті
Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
Як зробити смайли в коментаряхЯк зробити смайли в коментарях
Запит sql на створення індексуЗапит sql на створення індексу
» » Чи не працює sql-запит