<?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
}
}
?>
在这里,我正在尝试查找表名称并从给定表中删除数据 但是我认为使用变量作为表名存在任何语法错误。 我的代码没有给出任何错误,但仍然无法正常工作。
答案 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权限。在执行此操作之前,请考虑一下,如果在错误的数据库上使用它,这将是一个危险的脚本。