У меня есть строка sql, которую я хочу вывести из формы в строку, чтобы удалить таблицу. В настоящее время я использую следующую строку
$sql4 = "DROP TABLE gs.gs_object_data_<? echo $rows['$imei']; ?>";
Это не повторение IMEI, который я извлек из $_POST на предыдущей странице.
Я также пробовал следующие строки безрезультатно.
$sql4 = "DROP TABLE gs.gs_object_data_'%$imei%'";
$sql4 = "DROP TABLE gs.gs_object_data_'".$imei."'";
gs_object_data - константа во всех таблицах, отличается только imei
Мне нужен результат как таковой gs_object_data_111111 imei на предыдущей странице будет 111111
Любые предложения будут оценены.






Это будет работать:
$sql4 = "DROP TABLE gs.gs_object_data_{$rows['imei']};";
В моем ответе была ошибка, и я ее исправил. Это должно быть «imei», а не «$ imei». Если это не сработает, не могли бы вы опубликовать код, в котором выполняется подключение к базе данных, чтобы его было легче отлаживать?
Я обнаружил, что теперь это работает $sql4 = "DROP TABLE gs.gs_object_data_$imei"; Он также удаляет запрошенную таблицу
Похоже, вы хотите использовать переменную запроса POST - так ли это? Вы можете обнаружить, что sprintf полезен при создании таких строк — вы указываете заполнители в простой строке, а затем назначаете им переменную позже ~ в целом избавляет от проблем с экранированием кавычек.
Следующие тесты показывают, что переменная POST imei доступна, и создает sql, если она есть, иначе устанавливает переменную $sql как false (false можно использовать в логических тестах позже)
$sql = !empty( $_POST['imei'] ) ? sprintf( 'drop table `gs`.`gs_object_data_%s`;', $_POST['imei'] ) : false;
if ( $sql ){
/* do something with sql */
}
Я обнаружил, что следующий код работает
$sql4 = "DROP TABLE gs.gs_object_data_$imei";
imei уже установлен как переменная в POST с предыдущей страницы
Это кажется довольно уязвимым для SQL-инъекций. Сначала вы должны внести в белый список допустимые значения $imei, если вы еще этого не сделали.
Я получаю следующую ошибку. Неизвестная таблица 'gs.gs_object_data_' по-прежнему не вводит номер imei