从多个表中删除数据库中的数据

时间:2019-02-23 15:23:46

标签: php mysql

<?php
//after creating connection

$dbname = 'bca2y';//database name


$sql = "SHOW TABLES FROM $dbname";
$result = mysqli_query($conn , $sql);

if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

while ($row = mysqli_fetch_row($result)) {
$table = "{$row[0]}\n";

    echo "$table<br>";
if($conn == TRUE){
    echo "connection is possible<br>";
}
$sqld = "DELETE FROM $table";
$resultd = $conn->query($sqld);
    if($resultd === TRUE){
    echo "Data deleted succesfully ";//checking if data deleted
}
else {
    echo "some error<br>";// for checking if code is not running
}


}

?>

在这里,我正在尝试查找表名称并从给定表中删除数据 但是我认为使用变量作为表名存在任何语法错误。 我的代码没有给出任何错误,但仍然无法正常工作。

2 个答案:

答案 0 :(得分:0)

如果我理解您的意图-查找表并将其从数据库中删除,则“ DELETE FROM mes”不会实现此目标。在SQL中,“ DELETE FROM”从指定数据库中删除记录。更常见的是看到DELETE FROM TableName WHERE ColumnName is 'SomeValue'; –删除某些 set 记录。但是DELETE FROM TableName是有效的SQL查询-它从名为TableName的表中删除所有所有记录。

如果要删除从第一个查询检索到的表名中的所有记录,则需要在delete语句中使用变量名,而不是静态字符串mes。

如果要删除表(而不仅仅是删除表中包含的数据),请使用DROP TABLE

答案 1 :(得分:0)

如果要删除表中的所有行,则应使用TRUNCATE

DELETE将删除每行,这可能会花费很多时间,因为mysql的每个删除操作都需要完成很多工作。 TRUNCATE几乎会立即清空您的桌子

这是您的脚本,可实现您想要的

  $dbname = 'bca2y';//database name
  $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '".$dbname."'";
  $result = mysqli_query($conn , $sql);

if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

  $rows = $result->fetch_all(MYSQLI_ASSOC);
  foreach($rows as $table)
  {
      $sql = "TRUNCATE TABLE `".$table['TABLE_NAME']."`";
      $resultd = $conn->query($sql);

        if($resultd === TRUE){
        echo $table['TABLE_NAME']. " truncated succesfully ";//checking if data deleted
        }
        else {
            echo "some error<br>";// for checking if code is not running
        }     

  }

您的用户当然应该具有TRUNCATE权限。在执行此操作之前,请考虑一下,如果在错误的数据库上使用它,这将是一个危险的脚本。