2010-06-05 3 views
2

У меня есть некоторый набор запросов SQL, который находится в файле (т.е. query.sql), и я хочу, чтобы запустить эти запросы в файлах с помощью PHP, код, который я написал не работает,Как запустить набор 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() ...

+2

http://stackoverflow.com/questions/1883079/best-practice-import-mysql-file-in-php-split-queries – Wrikken

ответ

2
  1. Не используйте file(), если вы действительно хотите, линию за линией передачи данных. file_get_contents() лучше.
  2. $query==file($file_name); Я не думаю, что вы хотите сделать сравнение здесь.
  3. mysql_query будет выполнять только один запрос одновременно. Вам придется придумать какой-то способ разделения ваших запросов в файле и запустить их один за другим.
+0

спасибо @Matti Virkkunen ... –

1

Если вы когда-нибудь потрудились прочитать страницу руководства mysql_query(), она говорит, что эта функция может выполнять только один запрос за раз.
Таким образом, вы должны поместить его внутрь петли

+0

чтения некоторые комментарии тоже -> http://lv.php.net/manual/en/function.mysql-query.php#91669 – Anpher

+0

ooh! да .. я просто забыл .... спасибо @ Col.Shrapnel, чтобы показать мою ошибку ... –

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

Такого рода операции выполняются обычно в виде сценариев оболочки. Для дальнейших чтений, следующие чтения будут полезны для ознакомления с «за» и «против». Тем не менее, обычно пакетный вид операций должен выполняться под сценариями .sql, в противном случае работающий .sql крайне не рекомендуется.

Ссылки:

Running MySQL *.sql files in PHP

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