2014-10-22 125 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