Добрый вечер! Вот, например, у меня есть следующий запрос: "SELECT name FROM $table WHERE id=$id" Переменная $id у меня заэкранирована, а $table я экранировать не могу, иначе в любом случае будет ошибка. Следовательно вопрос, что с этим делать? Если я не ошибаюсь, то злоумышленник может подсунуть мне в $table что - нибудь необычное, и все будет очень плохо. Или можно просто $table в обратные кавычки поместить и этого достаточно будет для безопасности?
А $table разве пользователь выбирает? Используй подготовленные запросы http://habrahabr.ru/post/141127/
$table я через $_GET получаю. Без подготовленных запросов никак? Если, например, в $table лежит "users", то после экранирования будет "'users'", следовательно в запросе: SELECT FROM 'users' WHERE id=$id В этом случае выдает ошибку, хотя если убрать экранирование, то все ок. Если как - то по - другому можно, то подскажи, я за этим и написал на форум.
Вместо одинарной кавычки используй вот этот знак ` Прочитай книгу про mysql И используй подготовленные запросы.
во-первых, там не должно быть таких кавычек. Во-вторых, не будет там того, что ты написал. Читай доку.
Даже если без подготовленных запросов, без плейсхолдеров, сурово, по-крестьянски: Код (PHP): $allowed_tables=array('users', 'news', 'comments', 'goods'); if (in_array($_GET['table'], $allowed_tables)) die('Что за хрень вы от меня просите?'); Но все равно не вижу никакого оправдания тому, что имя таблицы передается через GET. У вас как-то явно очень неоптимально спроектирована система.