У меня много таблиц в моей базе данных SQL, и я хочу удалить из всех таблиц, где IP соответствует определенному IP-адресу в одном заявлении /Query. Есть ли способ сделать это быстро?
Что-то вроде:
DELETE FROM * tables where ip = '$ip';
Есть ли способ сделать это?
Как это
$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
Если вы не видите данные, которые вы вводите, когда вы смотрите на запрос, используйте подготовленные операторы. Потому что, вы никогда не знаете, когда вы переделаете кусок кода, и если это не будет сделано с самого начала, вы настроитесь на множество головных болей.
Это может быть одна вещь, которую вы делаете, но если вы планируете оставить код, я все равно буду использовать подготовленные заявления.
Разве вы не можете просто разделить их точкой с запятой?
DELETE FROM table1 WHERE id = 1;
DELETE FROM table2 WHERE id = 1;
DELETE FROM table3 WHERE id = 1;
Изучая детали вопроса, который вы предоставили. Вы можете сделать это с помощью Dynamic SQL.
Шаг 1) С помощью information_schema подготовьте динамический SQL, чтобы удалить запись из таблицы. Вы получите динамический SQL, как показано ниже.
Удалить из таблицы1, где ColumnName = 'IPAddress'; Удалить из таблицы2, где ColumnName = 'IPAddress';
Шаг 2) С помощью Execute Statement. Запустите этот динамический SQL, и это приведет к удалению всех записей из тех таблиц, где запись имеет IP-адрес в этом столбце.
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.
mysqli
когда вы используетеmysqli_multi_query()
.