我想在PHP中創建一個表單,它將加載一個.sql文件,讀取它的內容並對MySQL數據庫執行這些語句。PHP:讀取文本文件並執行SQL語句到MySQL
目前使用功能get_file_contents
,但它不工作。我能做什麼?
我想在PHP中創建一個表單,它將加載一個.sql文件,讀取它的內容並對MySQL數據庫執行這些語句。PHP:讀取文本文件並執行SQL語句到MySQL
目前使用功能get_file_contents
,但它不工作。我能做什麼?
如果你在你的文件的幾個疑問,你要麼必須:
mysql_query
或mysqli_query
這些查詢中的每一個。
mysql_query
:「多個查詢不支持」mysqli_multi_query
來一次
mysql_*
系列功能mysql
命令行客戶端,要導入的文件,像這樣的東西(你必須通過正確的價值觀,當然):
mysql --user=USERNAME --password=PASSWORD --host=localhost DATABASENAME < your-file.sql
我使用這一點Java代碼來導入sql查詢,它基本上使用特定的正則表達式將文件拆分爲行,並且剝離由mysqldump創建的註釋前綴。將這個移植到PHP應該是非常簡單的。
public static void importSQL(Connection conn, InputStream in) throws SQLException
{
Scanner s = new Scanner(in);
s.useDelimiter("(;\\s*(\r)?\n)|(--\n)");
Statement st = null;
int lineNum = 0;
try
{
st = conn.createStatement();
while (s.hasNext())
{
String line = s.next();
if (line.startsWith("/*!") && line.endsWith("*/"))
{
int i = line.indexOf(' ');
line = line.substring(i + 1, line.length() - " */".length());
}
if (line.trim().length() > 0)
{
try
{
st.execute(line);
}
catch (SQLException e)
{
logger.error("Error executing line #" + lineNum + " : " + line , e);
throw e;
}
}
lineNum++;
}
}
finally
{
if (st != null) st.close();
}
}
另一種方法是通過系統調用mysql命令行。 類似:
<?php
system("mysql -u $user -p$password $dbname < $filename");
?>
,但不是因各種原因產生的代碼(性能,安全性問題,你應該知道的等),一個非常好的主意。
你能發佈你的代碼嗎? – 2010-03-03 17:54:15
請張貼一些代碼。沒有更多信息就無法給出答案。 – 2010-03-03 17:55:18