【问题标题】:import sql via php通过php导入sql
【发布时间】:2011-08-10 00:42:14
【问题描述】:

这可能很明显,但我已通过 phpmyadmin 将数据库导出到 .sql 文件。我正在尝试通过 php 脚本将文件导入另一个数据库,但我不知道如何执行此操作。我确信这很容易做到,因为我可以通过 phpmyadmin 运行查询轻松完成同样的事情。有什么建议吗?

【问题讨论】:

标签: php mysql import


【解决方案1】:

你可以使用php的system()函数运行mysql命令。

你不能使用mysql_query,因为这个函数不能运行多个查询

system('mysql -u <user> -p<password> dbname < filename.sql');

【讨论】:

    【解决方案2】:

    我编写了这段代码,它对我有用。希望对您有所帮助。

    注意:这似乎有点太简单了,如果我忽略了某些东西,请有人警告我吗?谢谢

    $connection = new mysqli(DB_SERVER, DB_USER, DB_PASS, $databaseName);
    
    $query = "";
    
    foreach ($sqlFileContents as $line) {
      $line = trim($line);
    
      if ($line != "" && substr($line, 0, 2) != '--') {
        $query .= $line;
    
        if (substr($line, -1) == ';') {
          $connection->query($query);
    
          echo ($query."\n");
    
          if ($connection->errno) {
            echo ("\n".$connection->errno . ": ");
            echo ($connection->error."\n");
          }
    
          $query = "";
        }
      }
    }
    
    unset ($line);
    
    if ($connection->errno) {
      echo ($connection->errno . ": ");
      echo ($connection->error);
    }
    
    $connection->close();
    

    【讨论】:

      【解决方案3】:

      一个很好的答案:

      Best practice: Import mySQL file in PHP; split queries

      这里只需要添加一个上传功能

      【讨论】:

        【解决方案4】:

        如果是巨大的 SQL 文件,你需要做的就是

        $sql = file_get_contents('sqlfile.sql');
        //make the connection
        mysql_query($sql); //assuming what you have is actually valid SQL 
        

        只是好奇,为什么不通过数据库实用程序来做到这一点?

        编辑:正如 Shakthi Singh 指出的那样,您不能一次性在 mysql_query 中运行多个查询(虽然没有经过测试)。

        但是,根据您的文件,这可能仍会导致问题,如本问题所述:PHP: multiple SQL queries in one mysql_query statementmysql_query 不支持某些语句)

        因此,根据您的 SQL 的外观,上述解决方案可能不可行。

        然而,一切都没有丢失,这个线程:Loading .sql files from within PHP 谈论了一些替代方案。用户 arin sarkissian 指出 mysqli_multi_query() 是一个选项

        【讨论】:

        • @Shakti Singh 好点。我已经澄清了我的答案以考虑到这一点
        【解决方案5】:

        读入文件,然后

        mysql_query(file_contents)
        

        当心超时,我的儿子。

        【讨论】:

        • @Shakti Singh:SQL 注入攻击如何使用; 来终止查询并开始新的查询? Bobby Tables 对使用强大的 mysql_query 的网站没有影响...
        • 这里我说的不是SQL注入。如手册mysql_query() sends a unique query (multiple queries are not supported) 中所述。或者你可以自己尝试一下。
        • @Shakti Singh:刚刚尝试过。工作正常;仅获得第一个查询的结果,但执行了后面的查询。我认为该文档是针对较新版本的 PHP 或完整的。
        猜你喜欢
        • 2013-06-06
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 2016-01-04
        • 1970-01-01
        • 2018-12-26
        相关资源
        最近更新 更多