PHP:读取文本文件并对MySQL执行SQL语句

时间:2010-03-03 17:53:39

标签: php file-io

我想在PHP中创建一个表单,它将加载.sql文件,读取其内容,并对MySQL数据库执行这些语句。

目前正在使用函数get_file_contents,但它不起作用。我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果您的文件中有多个查询,则必须:

  • 将文件拆分为多个不同的查询,并为每个查询使用mysql_querymysqli_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");
?>

但由于各种原因(性能,您应该注意的安全隐患等),对生产代码不是一个好主意。