2011-11-29 53 views
5

我該如何通過php來源代碼如下所示的.sql文件?通過PHP來源MySQL文件?

CREATE DATABASE IF NOT EXISTS data_base; 
USE data_base; 
CREATE TABLE IF NOT EXISTS the_table( 
    package_name varchar(50) NOT NULL, 
    PRIMARY KEY (`package_name`) 
) 

我嘗試以下,但它不工作。我試圖做一些研究,似乎我需要做一些名爲LOAD DATA INFILE的東西,但我不明白。

mysql_query("source C:/xampp/htdocs/Project1/mysql/source.sql;") or die(mysql_error()); 

如何使用PHP來源.sql文件?謝謝。

回答

4

即使使用mysqli :: multi_query(),也不能運行SQL腳本。一個SQL腳本可以包含一些僅由mysql客戶端識別爲builtin commands的命令,而不是由MySQL服務器的SQL分析器識別。

SOURCE絕對是一個由mysql客戶端預處理的命令。服務器不理解該命令。因此,您無法在使用查詢API的服務器上執行SOURCE

如果您可以限制SQL腳本的內容以排除mysql客戶端內置命令,則可能會使用mysqli :: multi_query()。但它不適用於SQL腳本允許的全套命令。

另見我的回答Running MySQL *.sql files in PHP

LOAD DATA INFILE不執行SQL語句來創建表,它只是加載一個文本文件中的字段到一個現有的表。

2

您在混合mysql命令行語句和PHP函數調用。做一個或另一個。

利用mysql CLI(如果可用):

// executing mysql cli 
exec("mysql < test.sql"); 

或者與mysqli_multi_query()運行SQL:

// running the files contents in bulk 
$sql= file_get_contents('test.sql'); 
mysqli_multi_query($sql); 

注:這是一個潛在的安全風險。被告知。

+0

非常好,謝謝。爲什麼它是安全風險呢? – user954912

+1

SQL文件可能是惡意的(即僞造,用戶生成等)。另外,您對多重查詢的錯誤控制有限。關鍵在於它應該在非常特定和有限的情況下運行。 –