【问题标题】:How to run a set of SQL queries from a file, in PHP?如何在 PHP 中从文件运行一组 SQL 查询?
【发布时间】:2010-06-05 12:33:30
【问题描述】:

我在一个文件(即 query.sql)中有一组 SQL 查询,我想使用 PHP 在文件中运行这些查询,我编写的代码不起作用,

//database config's...
$file_name="query.sql";
$query=file($file_name);
$array_length=count($query);
for($i=0;$i<$array_length;$i++)
{
    $data .= $query[$i];
}

echo $data;    
mysql_query($data);

它从文件中回显 SQL 查询,但在 mysql_query() 函数中抛出错误...

【问题讨论】:

标签: php mysql file-io


【解决方案1】:
  1. 不要使用file(),除非您真的需要逐行获取数据。 file_get_contents() 更好。
  2. $query==file($file_name);我觉得你不想在这里做比较。
  3. mysql_query 一次只会执行一个查询。您必须想出一些方法来分离文件中的查询并逐个运行它们。

【讨论】:

    【解决方案2】:

    如果你曾经费心阅读 mysql_query() 手册页,它说这个函数一次只能执行一个查询。
    所以,你必须把它放在循环中

    【讨论】:

    【解决方案3】:
    Try this:    
    
    // SQL File
        $SQLFile = 'YourSQLFile.sql';
    
        // Server Name
        $hostname = 'localhost';
    
        // User Name
        $db_user = 'root';
    
        // User Password
        $db_password = '';
    
        // DBName
        $database_name = 'YourDBName';
    
        // Connect MySQL
        $link = mysql_connect($hostname, $db_user, $db_password);
    
        if (!$link) {
        die("MySQL Connection error");
        }
    
        // Select MySQL DB
        mysql_select_db($database_name, $link) or die("Wrong MySQL Database");
    
        // Function For Run Multiple Query From .SQL File
        function MultiQuery($sqlfile, $sqldelimiter = ';') {
        set_time_limit(0);
    
        if (is_file($sqlfile) === true) {
        $sqlfile = fopen($sqlfile, 'r');
    
        if (is_resource($sqlfile) === true) {
        $query = array();
        echo "<table cellspacing='3' cellpadding='3' border='0'>";
    
        while (feof($sqlfile) === false) {
        $query[] = fgets($sqlfile);
    
        if (preg_match('~' . preg_quote($sqldelimiter, '~') . '\s*$~iS', end($query)) === 1) {
        $query = trim(implode('', $query));
    
        if (mysql_query($query) === false) {
        echo '<tr><td>ERROR:</td><td> ' . $query . '</td></tr>';
        } else {
        echo '<tr><td>SUCCESS:</td><td>' . $query . '</td></tr>';
        }
    
        while (ob_get_level() &gt; 0) {
        ob_end_flush();
        }
    
        flush();
        }
    
        if (is_string($query) === true) {
        $query = array();
        }
        }
        echo "</table>";
    
        return fclose($sqlfile);
        }
        }
    
        return false;
        }
    
        /* * * Use Function Like This: ** */
    
        MultiQuery($SQLFile);
    

    【讨论】:

      【解决方案4】:

      这类操作通常作为 shell 脚本执行。对于进一步的阅读,以下阅读将有助于了解利弊。但是,通常批处理类型的操作应在 .sql 脚本下完成,否则强烈建议不要运行 .sql。

      参考文献:

      Running MySQL *.sql files in PHP

      http://php.net/manual/en/function.shell-exec.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 2020-11-20
        • 2020-04-06
        • 1970-01-01
        相关资源
        最近更新 更多