2014-10-22 110 views
2

我创建了一个backup.sql脚本来恢复MySql数据库。我用PHPMyAdmin导入检查了脚本,一切正常(数据库已成功恢复)。现在我想通过PHP运行它。我发现this question,我有:通过PHP运行SQL脚本

1)创建一个PHP文件放入htdocs文件夹包含以下内容

$site_path= realpath(dirname(__FILE__)).'/'; 

$command = 'mysql' 
    . ' --host=' . 'localhost' 
    . ' --user=' . 'myuser' 
    . ' --password=' . 'mypass' 
    . ' --database=' . 'dbname' 
    . ' --execute="SOURCE ' . $site_path; 

$output = shell_exec($command . 'backup.sql"'); 
echo "<pre>".$output."</pre>"; 

2)放置在backup.sql脚本到htdocs文件夹

但是,当我运行脚本,数据库没有任何反应,并且没有显示shell_exec结果。我在Windows机器上的Apache下运行PHP和MySql。该命令变量具有以下值:

mysql --host=localhost --user=myuser --password=mypass--database=dbname --execute="SOURCE C:\Programmi\Apache Software Foundation\Apache2.2\htdocs/ 

我错过了什么?

+0

您是否启用了PHP错误? – 2014-10-22 11:57:25

+0

是的,我已经启用了error_reporting(E_ALL);'和 'ini_set('display_errors',1);' – Giorgio 2014-10-22 11:58:59

+0

我刚刚意识到您要导入以前用PHP创建的备份。为什么你甚至想用PHP脚本来做到这一点?你可以通过手工甚至bash脚本轻松完成此操作。 – 2014-10-22 18:11:58

回答

3
$mysql_host = "localhost"; 
$mysql_database = "db"; 
$mysql_user = "user"; 
$mysql_password = "password"; 
# MySQL with PDO_MYSQL 
$db = new PDO("mysql:host=$mysql_host;dbname=$mysql_database", $mysql_user, $mysql_password); 

$query = file_get_contents("shop.sql"); 

$stmt = $db->prepare($query); 

if ($stmt->execute()) 
    echo "Success"; 
else 
    echo "Fail"; 

如果你在你的SQL文件的整个代码100%正确的,没有改变就可以了,那就试试这个,在代码中使用PDO为更好的安全性。

+0

它说“在将dbname导出到〜/ backup.sql期间出现警告”。但是,如果我正确地解释了你的答案,这个脚本似乎会导出一个数据库,而我想将之前创建的备份导入Mysql。 – Giorgio 2014-10-22 12:07:57

0

您可以使用MYSQL DBMS工具作为Workbench来解决此问题,您可以在此连接远程/本地服务器,并在不使用PHP的情况下运行.sql文件。

PHP是为了用于施加反映某些业务功能和服务器操作或其他工具类似的职位DBMS工具不基本上做出业务查询..

如果你真的需要做到这一点,你可以检查此tutorial读取sql文件并使用;字符将查询分解为数组,这些字符将划定每个查询。

然后它使用foreach遍历数组中的每个查询并自行执行查询。

+0

php虽然可能主要用于运行Web应用程序,但它是一种通用脚本语言,完全适用于需要脚本语言的服务器操作,自动化,内部功能或任何其他用例 – chiliNUT 2017-10-05 18:55:46