0

我正在尝试编写一个将重置数据库的脚本。我有一个正在使用的导出,可以使用 phpMyAdmin 导入。SQL 文件与我正在使用的脚本位于同一位置。

当我运行它时,我很早就在文件中收到了 sql 文件中的错误。

<?php
$mysqli = new mysqli('host', 'username', 'password', 'database');
$mysqli->query('SET foreign_key_checks = 0');
if ($result = $mysqli->query("SHOW TABLES"))
{
    while($row = $result->fetch_array(MYSQLI_NUM))
    {
        $mysqli->query('DROP TABLE IF EXISTS '.$row[0]);
    }
}

$mysqli->query('SET foreign_key_checks = 1');



$sql_filename = 'clean.sql';
$sql_contents = file_get_contents($sql_filename);
$result = $mysqli->query($sql_contents) or die("Database query failed: ".$mysqli->error);

$mysqli->close();

?>
4

2 回答 2

0

您需要执行 multi_query() 来插入所有数据

$result = $mysqli->multi_query($sql_contents) or die("Database query failed: ".$mysqli->error);

看这里; http://php.net/manual/en/mysqli.quickstart.multiple-statement.php http://www.php.net/manual/en/mysqli.multi-query.php

于 2013-06-28T13:51:35.140 回答
0

您不能在对 的调用中执行多个语句mysqli::query(),而我假设您clean.sql包含许多语句。

您可能希望一次读取文件一条语句(;默认情况下是语句分隔符),或者更好的是,使用以下内容对mysql客户端进行系统调用:

<?php
    exec("/path/to/mysql -D [your_database] < /path/to/clean.sql");
于 2013-06-28T13:51:48.817 回答