PHP:读取文本文件并执行SQL语句到MySQL
问题描述:
我想在PHP中创建一个表单,它将加载一个.sql文件,读取它的内容并对MySQL数据库执行这些语句。PHP:读取文本文件并执行SQL语句到MySQL
目前使用功能get_file_contents
,但它不工作。我能做什么?
答
如果你在你的文件的几个疑问,你要么必须:
- 分割文件分成多个不同的查询,请使用
mysql_query
或mysqli_query
这些查询中的每一个。- 这两个功能不能每次调用执行多个查询:引述manual page of
mysql_query
:“多个查询不支持”
- 这两个功能不能每次调用执行多个查询:引述manual page of
- 使用
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