2015-09-05 2 views
0

У меня есть статическое соединение с базой данных, установленное в файле, который я включаю вmysqli_real_string_escape неудачи с ГЕТ

include_once 'database.inc.php'; 

имени $mysqli.

Когда я прохожу параметр $tbname из формы с помощью $tbname = $_GET['tbname'] и попытаться использовать $tbname = $mysqli->real_esacpe_string($tbname), он производит идентичный вывод $ tbname, в том числе, когда недопустимые символы, такие как /,'" используется в названии.

Основываясь на других вопросах и правильном использовании, я не могу найти причину, по которой побег строки должен завершиться неудачно. Он также терпит неудачу, если процедурный вызов используется для mysqli_real_escape_string($mysqli, $tbname).

Когда $tbname корректен и не строка спасся функции, мой запрос

query = $mysqli->prepare("CREATE TABLE $tbname (ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY)") or trigger_error($mysqli->error."[$query]"); 

работает как задумано.

ответ

0
  1. Нет никакой причины использовать эту функцию для экранирования имени таблицы, и вы никогда не должны использовать ее для такой цели.
  2. Нет причин создавать таблицы из пользовательского ввода, и вы никогда не должны создавать таблицы «на лету», но всегда иметь прочную и предопределенную структуру базы данных.
  3. mysqli_real_escape_string Уходит от этих символов \'". Но вы никогда не должны его использовать. Вместо этого вы должны использовать подготовленные заявления
+0

Ну, причина, по которой я не использовал подготовленные заявления, заключалась в том, что, по-видимому, вы не можете динамически создавать такие таблицы. Спасибо за ваш ответ. – socrates

Смежные вопросы