Во избежание SQL-инъекций я сделал некоторые исследования и основал на this ответах. Я начал использовать подготовленные статичные таблицы MySQLi. Все прошло нормально, пока я не попал в параметры order by
и order type
, которые отправляются из интерфейса, на основе того, что пользователь нажимает. Чтобы быть более конкретным, у меня есть несколько таблиц с некоторыми заголовками, и пользователь может упорядочить данные с учетом имени, цены, даты и т. Д., А также он может выбирать между ASC
или DESC
. Я сохраняю это в скрытом виде ввода, поэтому я предполагаю, что они могут изменить это, используя firebug
. Из-за этого я должен быть уверен, что они не могут вводить что-либо в мою базу данных.PHP | MySQLi подготовленные операторы - Обработка порядка и параметров типа заказа
$stmt = $dbConnection->prepare('SELECT * FROM mytable WHERE 1 ORDER BY ? ?');
$stmt->bind_param('ss', $_GET['order_by'], $_GET['order_type']);
Похоже, что я получаю сообщение об ошибке. Я сделал несколько исследований, и кто-то сказал, что для этого нет решения, другой человек сказал, что единственное решение жестко запрограммировано, и другой человек сказал, что мне нужно выйти из подготовленных заявлений и попробовать mysql_real_escape_string
, но в ответе, который я связал, говорят:
Если вы используете последнюю версию РНР mysql_real_escape_string вариант приводится ниже больше не будет доступна
Так что я gueess это не так же. Итак, мой вопрос остается, что мне делать дальше? Есть ли решение для этой проблемы?
Вы можете использовать только параметры для значений, вы не можете использовать их для замены имен таблиц и столбцов. – Barmar
Причина 'mysql_real_escape_string' недоступна, так как расширение' mysql' исчезло. Но если вы используете 'mysqli', то он имеет' mysqli_real_escape_string'. Но это не полезно для этого, потому что это для экранирования строк, а не от столбцов. – Barmar