Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL和PHP中的空数据库?_Php_Mysql - Fatal编程技术网

MySQL和PHP中的空数据库?

MySQL和PHP中的空数据库?,php,mysql,Php,Mysql,是否可以通过使用PHP连接并发出命令来清空整个数据库?您可以使用 SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 并使其截断 甚至,你可以 SELECT 'TRUNCATE TABLE ' + table_name + ';' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db' 然后迭代结果集,对每条记录执行字

是否可以通过使用PHP连接并发出命令来清空整个数据库?

您可以使用

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db'
并使其截断

甚至,你可以

SELECT 'TRUNCATE TABLE ' + table_name + ';' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your db'

然后迭代结果集,对每条记录执行字符串查询。

是。基本上,您需要获得数据库中所有表的列表,然后迭代该列表,并为每个条目发出
TRUNCATE TABLE$tablename


这看起来是一个相当不错的实现:

如果您有权限,最简单的方法是:

DROP DATABASE dbName; CREATE DATABASE dbName; USE DATABASE dbName; 删除数据库dbName; 创建数据库dbName; 使用数据库dbName; 另一种方法是查询
信息\u模式
数据库中的触发器、存储例程(过程和函数)、表、视图以及可能的其他内容,然后逐个删除它们

即使在此之后,您的数据库可能仍与新创建的数据库处于不同的状态,因为它可能具有自定义的默认字符集和排序规则集。使用
alterdatabase
来更改此设置


随着功能的不断增加(事件…),您将以这种方式进行越来越多的工作。因此,实际上,完全清空数据库的唯一方法是删除它并重新创建它。

您可以获得数据库中所有表的列表(
$databaseName
),循环遍历所有表,并对每个表应用
截断表

$result = mysqli_query($link, "SHOW TABLES IN `$databaseName`"); 
while ($table = mysqli_fetch_array($result)) {
    $tableName = $table[0];
    mysqli_query($link, "TRUNCATE TABLE `$databaseName`.`$tableName`");

    if (mysqli_errno($link)) echo mysqli_errno($link) . ' ' . mysqli_error($link);
    else echo "$tableName was cleared<br>";
}
$result=mysqli\u query($link,“在“$databaseName”中显示表”);
while($table=mysqli\u fetch\u数组($result)){
$tableName=$table[0];
mysqli_查询($link,“TRUNCATE TABLE`$databaseName`.`$tableName`);
if(mysqli_errno($link))回显mysqli_errno($link)。“”.mysqli_error($link);
else echo“$tableName已清除
”; }
这将清除数据库中所有表的内容,保留结构。

这对我来说很有效

mysql -u < DB-USER > -p<DB-PASS> --silent --skip-column-names -e "SHOW TABLES" <DB-NAME> | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -u < DB-USER > -p< DB-PASS > -v < DB-NAME >
mysql-u-p--silent--skip列名-e“SHOW TABLES”| xargs-L1-I%echo“DROP TABLE`%`;”mysql-u-p-v

是。您可以连接数据库并通过作为变量赋值来截断表

$conn=newmysqli($servername、$username、$password、$dbname)

$variableName=$conn->query($que)

如果($conn->connect\u错误){

die(“连接失败:”.$conn->connect\U错误)

}

$result=$conn->query('TRUNCATE TABLE yourtablename;')


您将丢失表的结构。主题启动者除了想要一个同名的空数据库外,什么也没说,所以它完美地回答了这个问题。没有理由做出可能错误的假设,这就是为什么这个答案从我这里得到+1。如果用户没有
CREATE DATABASE
权限,他们将被卡住。要使用数据库,只需
use dbName
不带
数据库
关键字。请提供更多信息。“仅编码”和“尝试此”答案是错误的,因为它们不包含可搜索的内容,并且没有解释为什么有人应该“尝试此”。我们在这里努力成为知识资源。当它们是外键约束时,这不起作用。请在解决方案中添加说明,以便更好地理解。虽然这可能会回答作者的问题,但它缺少一些解释词和/或文档链接。如果没有一些短语,原始代码片段就没有多大帮助。你也会发现这很有帮助。请编辑你的答案-
<?php
    $connection = new mysqli($host, $user, $pass, $db);
    $sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '".$db."'";
    $result = $connection->query($sql);
    $tables = $result->fetch_all(MYSQLI_ASSOC);
    foreach($tables as $table) {
        $sql = "TRUNCATE TABLE `".$table['TABLE_NAME']."`";
        $result = $connection->query($sql);
    }
?>
if ($result) {

    echo "Request ID table has been truncated";  

   }

   else echo "Something went wrong: " . mysqli_error();