PHP:读取文本文件并对MySQL执行SQL语句
我想用PHP创建一个表单,它将加载一个.sql文件,读取其内容,并对MySQL数据库执行这些语句PHP:读取文本文件并对MySQL执行SQL语句,php,file-io,Php,File Io,我想用PHP创建一个表单,它将加载一个.sql文件,读取其内容,并对MySQL数据库执行这些语句 当前正在使用函数“获取文件内容”,但该函数不起作用。我能做什么?如果您的文件中有多个查询,您必须: 将文件拆分为多个不同的查询,并对每个查询使用或。 这两个函数每次调用不能执行多个查询:引用“不支持多个查询” 用于一次发送多个查询 没有使用函数族的等效项 使用mysql命令行客户端导入文件,如下所示(当然,您必须传递正确的值): mysql--user=USERNAME--passwor
当前正在使用函数“获取文件内容”,但该函数不起作用。我能做什么?如果您的文件中有多个查询,您必须:
- 将文件拆分为多个不同的查询,并对每个查询使用或。
- 这两个函数每次调用不能执行多个查询:引用“不支持多个查询”
- 用于一次发送多个查询
- 没有使用函数族的等效项
- 使用
命令行客户端导入文件,如下所示(当然,您必须传递正确的值):mysql
mysql--user=USERNAME--password=password--host=localhost DATABASENAME
- 将文件拆分为多个不同的查询,并对每个查询使用或。
- 这两个函数每次调用不能执行多个查询:引用“不支持多个查询”
- 用于一次发送多个查询
- 没有使用函数族的等效项
- 使用
命令行客户端导入文件,如下所示(当然,您必须传递正确的值):mysql
mysql--user=USERNAME--password=password--host=localhost DATABASENAME
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");
?>
但是,由于各种原因(性能、您应该注意的安全问题等),对于生产代码来说,这不是一个很好的主意。我使用这段Java代码来导入sql查询,它基本上使用特定的regexp将文件拆分成行,并去掉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");
?>
但由于各种原因(性能、您应该注意的安全问题等),这不是生产代码的好主意。请发布一些代码。没有更多的信息是不可能给出答案的。请发一些代码。没有更多的信息是不可能给出答案的。