我想在PHP中创建一个表单,它将加载.sql文件,读取其内容,并对MySQL数据库执行这些语句。
目前正在使用函数get_file_contents
,但它不起作用。我该怎么办?
答案 0 :(得分:1)
如果您的文件中有多个查询,则必须:
mysql_query
或mysqli_query
。
mysql_query
:“不支持多个查询”mysqli_multi_query
一次发送多个查询
mysql_*
函数族mysql
命令行客户端导入文件,使用类似的内容(当然,您必须传递正确的值):
mysql --user=USERNAME --password=PASSWORD --host=localhost DATABASENAME < your-file.sql
答案 1 :(得分:0)
我使用这段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");
?>
但由于各种原因(性能,您应该注意的安全隐患等),对生产代码不是一个好主意。