2010-03-03 96 views
1

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

目前使用功能get_file_contents,但它不工作。我能做什么?

+1

你能发布你的代码吗? – 2010-03-03 17:54:15

+0

请张贴一些代码。没有更多信息就无法给出答案。 – 2010-03-03 17:55:18

回答

1

如果你在你的文件的几个疑问,你要么必须:

  • 分割文件分成多个不同的查询,请使用mysql_querymysqli_query这些查询中的每一个。
  • 使用mysqli_multi_query来一次
    • 派几个疑问使用mysql_*系列功能
  • 使用mysql命令行客户端,要导入的文件,像这样的东西(你必须通过正确的价值观,当然)
    • mysql --user=USERNAME --password=PASSWORD --host=localhost DATABASENAME < your-file.sql
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"); 
?> 

,但不是因各种原因产生的代码(性能,安全性问题,你应该知道的等),一个非常好的主意。