Member 13937634 Ответов: 2

Ошибка Sql - запроса в сценарии на миллион долларов


У меня есть скрипт сайта на миллион долларов, который позволяет мне продавать пиксельные блоки, но всякий раз, когда я пытаюсь добавить новую рекламу, он выдает мне следующую ошибку.
"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 'AS ID, t2.field_comment AS FCOMMENT FROM form_fields AS t1, form_field_translati' at line 1"

вот полный запрос
"SELECT t2.field_label AS FLABEL, t1.* AS ID, t2.field_comment AS FCOMMENT FROM form_fields AS t1, form_field_translations AS t2 WHERE t1.field_id=t2.field_id AND lang='".$_SESSION['MDS_LANG']."' AND section='$section' AND form_id='$form_id' $where_sql order by field_sort"

пожалуйста помочь.

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

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

Mehdi Gholam

Попробуйте потратить часть миллиона долларов на обучение!

Richard MacCutchan

t1.* AS ID
Как ты думаешь, что должна делать эта звездочка?

И не используйте код, загруженный из интернета, Если вы его не понимаете. Это просто доставит вам больше хлопот, чем стоит.

2 Ответов

Рейтинг:
8

Patrice T

Из-за проблемы SQL-инъекции мы понятия не имеем, что такое настоящий запрос.

"SELECT t2.field_label AS FLABEL, t1.* AS ID, t2.field_comment AS FCOMMENT FROM form_fields AS t1, form_field_translations AS t2 WHERE t1.field_id=t2.field_id AND lang='".$_SESSION['MDS_LANG']."' AND section='$section' AND form_id='$form_id' $where_sql order by field_sort"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
20

OriginalGriff

Как вы ожидаете, что возможное множественное число столбцов будет возвращено и дано одно и то же имя?

... , t1.* AS ID, ...
"*"возвращает несколько строк и может использоваться с AS

Никогда не используйте SELECT * ... От - Всегда перечисляйте свои столбцы. Таким образом, у вас есть контроль над тем, что именно возвращается, и порядок его возврата, поэтому изменения базы данных не влияют на ваш код (если только необходимый столбец не будет удален, и в этом случае вы определенно хотите знать об этом). Это также помогает с пропускной способностью, поскольку ненужные столбцы не возвращаются, что может привести к потере большой пропускной способности, памяти и времени.