Удалить из всех таблиц, где ip равен ip

0

У меня много таблиц в моей базе данных SQL, и я хочу удалить из всех таблиц, где IP соответствует определенному IP-адресу в одном заявлении /Query. Есть ли способ сделать это быстро?

Что-то вроде:

DELETE FROM * tables where ip = '$ip';

Есть ли способ сделать это?

Теги:

3 ответа

2

Как это

$tables = ['table1','table2','table3'];

foreach($tables as $table){
  //DELETE FROM '$table' tables where ip = :ip;
}

Просто убедитесь, что вы используете подготовленные операторы и "консервированные" имена таблиц. Никогда не объединяйте пользовательский ввод в свой sql.

Представьте себе, что это $ip = "1' OR 1=1"; Теперь все ваши данные были удалены. AKA sql Injection.

Потому что ваш невинный запрос:

 DELETE FROM table where ip = '$ip'

становится:

  DELETE FROM table where ip = '1' OR 1=1

И 1 всегда равно 1

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

Это может быть одна вещь, которую вы делаете, но если вы планируете оставить код, я все равно буду использовать подготовленные заявления.

0

Разве вы не можете просто разделить их точкой с запятой?

DELETE FROM table1 WHERE id = 1;
DELETE FROM table2 WHERE id = 1;
DELETE FROM table3 WHERE id = 1;
  • 3
    Большинство PHP MySQL API не допускают множественные запросы. Единственным является mysqli когда вы используете mysqli_multi_query() .
0

Изучая детали вопроса, который вы предоставили. Вы можете сделать это с помощью Dynamic SQL.

Шаг 1) С помощью information_schema подготовьте динамический SQL, чтобы удалить запись из таблицы. Вы получите динамический SQL, как показано ниже.

Удалить из таблицы1, где ColumnName = 'IPAddress'; Удалить из таблицы2, где ColumnName = 'IPAddress';

Шаг 2) С помощью Execute Statement. Запустите этот динамический SQL, и это приведет к удалению всех записей из тех таблиц, где запись имеет IP-адрес в этом столбце.

  • 0
    Не поможет MySQL. Функция PREPARE не может подготовить несколько операторов SQL. PREPARE stmt FROM 'SELECT 1; SELECT 2'; приведет к ошибке. Error Code: 1064 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 'SELECT 2' at line 1 Эта ошибка говорит мне, что PREPARE может обрабатывать только один оператор SQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню