我的SQL数据库中有很多表,我想从中删除所有表,其中IP与一个语句/查询中的某个IP匹配。有没有办法快速完成?
类似的东西:
DELETE FROM * tables where ip = '$ip';
有办法做到这一点吗?
答案 0 :(得分: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
AND 1
始终等于1
如果在查看查询时看不到放入的数据,请使用预准备语句。因为,你永远不知道什么时候你会重新编写一段代码,如果从一开始就没有完成,你就会为自己设置很多麻烦。
这可能是你正在做的一次性事情,但如果你打算留下代码,我仍然会使用准备好的陈述。
答案 1 :(得分:0)
难道你不能用分号分隔它们吗?
DELETE FROM table1 WHERE id = 1;
DELETE FROM table2 WHERE id = 1;
DELETE FROM table3 WHERE id = 1;
答案 2 :(得分:0)
查看您提供的问题的详细信息。您可以在Dynamic SQL的帮助下完成此操作。
步骤1)在information_schema的帮助下,准备动态SQL以从表中删除记录。您将获得如下的动态SQL
从table1中删除ColumnName =' IPAddress&#39 ;; 从table2中删除ColumnName =' IPAddress';
步骤2)在Execute Statement的帮助下。运行该动态SQL,这将删除那些记录在该列中具有IP地址的表中的所有记录。