Как запустить набор SQL-запросов из файла в PHP? - PullRequest
1 голос
/ 05 июня 2010

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

Ответы [ 4 ]

2 голосов
/ 05 июня 2010
  1. Не используйте file(), если вы действительно не хотите, чтобы данные были построчными. file_get_contents() лучше.
  2. $query==file($file_name); Не думаю, что вы хотите провести сравнение здесь.
  3. mysql_query будет выполнять только один запрос одновременно. Вам придется придумать способ разделения ваших запросов в файле и запускать их один за другим.
2 голосов
/ 09 октября 2011
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);
1 голос
/ 05 июня 2010

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

0 голосов
/ 09 октября 2017

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

Рекомендации:

Запуск MySQL * .sql файлов в PHP

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...