2010-06-05 45 views
2

我有一些集的SQL查询是在一个文件(即query.sql的),我想用PHP,我已经写了不正常的代码文件中运行这些查询,如何在PHP中从文件运行一组SQL查询?

//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()函数中引发错误...

+2

http://stackoverflow.com/questions/1883079/best-practice-import-mysql-file-in-php-split-queries – Wrikken 2010-06-05 12:40:30

回答

2
  1. 不要使用file()内,除非你真的想要的数据线,由线。 file_get_contents()比较好。
  2. $query==file($file_name);我不认为你想在这里做一个比较。
  3. mysql_query只会一次执行单个查询。您必须想出一些方法将文件中的查询分开并逐个运行。
+0

谢谢@Matti Virkkunen ... – 2010-06-05 12:49:10

1

如果您曾经打扰自己读取mysql_query()手册页,它说这个函数一次只能执行一个查询。
所以,你必须把它的循环

+0

读一些评论 - > http://lv.php.net/manual/en/function.mysql-query.php#91669 – Anpher 2010-06-05 12:41:55

+0

哦!是啊..我只是忘了....谢谢@ Col.Shrapnel显示我的错误... – 2010-06-05 12:44:10

2
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);