Yükleniyor. Sql dosyalarını PHP içinde

20 Cevap php

Ben geliştiriyorum bir uygulama için bir kurulum komut dosyası oluşturma ve PHP içinde dinamik veritabanları oluşturmanız gerekir ediyorum. Ben veritabanı oluşturmak için var ama şimdi ben birkaç yüklemek gerekir. Sql dosyaları. Ben şema dosyaları baktı ve onlar satıra sadece bir sorgu değil anlayıncaya kadar - Ben dosyayı açın ve bir anda bir satır mysql_query planlıyordu.

Peki, .. nasıl PHP içinde bir sql dosyası yüklemek lütfen? (PhpMyAdmin It ithalat komutu ile yaptığı gibi).

20 Cevap

Ben bu soruya cevap vermedi herkes burada bu insanların kendi sunucularında uygulamayı yüklemek için olanak sağlayan bir web uygulaması geliştiricisi olmak nasıl bir şey olduğunu bilmiyor ki duygu alıyorum. Özellikle, daha önce bahsedilen "LOAD DATA" sorgu gibi SQL kullanmak için izin vermez, barındırma paylaştı. En çok paylaşılan barındıran ayrıca shell_exec kullanmak için izin vermez.

Şimdi, OP cevaplamak için, en iyi bahis sadece bir değişken içinde sorguları içeren ve sadece bunları çalıştırabilirsiniz bir PHP dosyası dışında inşa etmektir. Ayrıştırmak için. Sql dosyaları tespit ediyorsanız, phpMyAdmin içine bakmak ve. Sql bu şekilde dosyaları üzerinden veri almak için bazı fikirler almak gerekir. Montajcılar var diğer web uygulamalarında etrafına bakmak ve yerine kullanımı daha olduğunu göreceksiniz. Sorguları için sql dosyaları, sadece PHP dosyalarına kadar paketi ve sadece mysql_query ya da ne kadar her dize çalıştırmak onlar yapmak gerekir olduğunu .

phpBB kendi dosyalarını ayrıştırmak için birkaç işlevleri kullanır. Bunlar yerine (ne bir istisna!) Iyi yorumladı böylece kolayca (I http://www.frihost.com/forums/vt-8194.html bu çözüm var) ne yaptıklarını biliyorsunuz. Burada çözüm, bir ben çok kullandım:



<?php
ini_set('memory_limit', '5120M');
set_time_limit ( 0 );
/***************************************************************************
*                             sql_parse.php
*                              -------------------
*     begin                : Thu May 31, 2001
*     copyright            : (C) 2001 The phpBB Group
*     email                : support@phpbb.com
*
*     $Id: sql_parse.php,v 1.8 2002/03/18 23:53:12 psotfx Exp $
*
****************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

/***************************************************************************
*
*   These functions are mainly for use in the db_utilities under the admin
*   however in order to make these functions available elsewhere, specifically
*   in the installation phase of phpBB I have seperated out a couple of
*   functions into this file.  JLH
*
\***************************************************************************/

//
// remove_comments will strip the sql comment lines out of an uploaded sql file
// specifically for mssql and postgres type files in the install....
//
function remove_comments(&$output)
{
   $lines = explode("\n", $output);
   $output = "";

   // try to keep mem. use down
   $linecount = count($lines);

   $in_comment = false;
   for($i = 0; $i < $linecount; $i++)
   {
      if( preg_match("/^\/\*/", preg_quote($lines[$i])) )
      {
         $in_comment = true;
      }

      if( !$in_comment )
      {
         $output .= $lines[$i] . "\n";
      }

      if( preg_match("/\*\/$/", preg_quote($lines[$i])) )
      {
         $in_comment = false;
      }
   }

   unset($lines);
   return $output;
}

//
// remove_remarks will strip the sql comment lines out of an uploaded sql file
//
function remove_remarks($sql)
{
   $lines = explode("\n", $sql);

   // try to keep mem. use down
   $sql = "";

   $linecount = count($lines);
   $output = "";

   for ($i = 0; $i < $linecount; $i++)
   {
      if (($i != ($linecount - 1)) || (strlen($lines[$i]) > 0))
      {
         if (isset($lines[$i][0]) && $lines[$i][0] != "#")
         {
            $output .= $lines[$i] . "\n";
         }
         else
         {
            $output .= "\n";
         }
         // Trading a bit of speed for lower mem. use here.
         $lines[$i] = "";
      }
   }

   return $output;

}

//
// split_sql_file will split an uploaded sql file into single sql statements.
// Note: expects trim() to have already been run on $sql.
//
function split_sql_file($sql, $delimiter)
{
   // Split up our string into "possible" SQL statements.
   $tokens = explode($delimiter, $sql);

   // try to save mem.
   $sql = "";
   $output = array();

   // we don't actually care about the matches preg gives us.
   $matches = array();

   // this is faster than calling count($oktens) every time thru the loop.
   $token_count = count($tokens);
   for ($i = 0; $i < $token_count; $i++)
   {
      // Don't wanna add an empty string as the last thing in the array.
      if (($i != ($token_count - 1)) || (strlen($tokens[$i] > 0)))
      {
         // This is the total number of single quotes in the token.
         $total_quotes = preg_match_all("/'/", $tokens[$i], $matches);
         // Counts single quotes that are preceded by an odd number of backslashes,
         // which means they're escaped quotes.
         $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches);

         $unescaped_quotes = $total_quotes - $escaped_quotes;

         // If the number of unescaped quotes is even, then the delimiter did NOT occur inside a string literal.
         if (($unescaped_quotes % 2) == 0)
         {
            // It's a complete sql statement.
            $output[] = $tokens[$i];
            // save memory.
            $tokens[$i] = "";
         }
         else
         {
            // incomplete sql statement. keep adding tokens until we have a complete one.
            // $temp will hold what we have so far.
            $temp = $tokens[$i] . $delimiter;
            // save memory..
            $tokens[$i] = "";

            // Do we have a complete statement yet?
            $complete_stmt = false;

            for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++)
            {
               // This is the total number of single quotes in the token.
               $total_quotes = preg_match_all("/'/", $tokens[$j], $matches);
               // Counts single quotes that are preceded by an odd number of backslashes,
               // which means they're escaped quotes.
               $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches);

               $unescaped_quotes = $total_quotes - $escaped_quotes;

               if (($unescaped_quotes % 2) == 1)
               {
                  // odd number of unescaped quotes. In combination with the previous incomplete
                  // statement(s), we now have a complete statement. (2 odds always make an even)
                  $output[] = $temp . $tokens[$j];

                  // save memory.
                  $tokens[$j] = "";
                  $temp = "";

                  // exit the loop.
                  $complete_stmt = true;
                  // make sure the outer loop continues at the right point.
                  $i = $j;
               }
               else
               {
                  // even number of unescaped quotes. We still don't have a complete statement.
                  // (1 odd and 1 even always make an odd)
                  $temp .= $tokens[$j] . $delimiter;
                  // save memory.
                  $tokens[$j] = "";
               }

            } // for..
         } // else
      }
   }

   return $output;
}

$dbms_schema = 'yourfile.sql';

$sql_query = @fread(@fopen($dbms_schema, 'r'), @filesize($dbms_schema)) or die('problem ');
$sql_query = remove_remarks($sql_query);
$sql_query = split_sql_file($sql_query, ';');

$host = 'localhost';
$user = 'user';
$pass = 'pass';
$db = 'database_name';

mysql_connect($host,$user,$pass) or die('error connection');
mysql_select_db($db) or die('error database selection');

$i=1;
foreach($sql_query as $sql){
echo $i++;
echo "
"; mysql_query($sql) or die('error in query'); } ?>

Basit çözüm girdi olarak SQL komut ile mysql istemcisini çalıştırmak için shell_exec () kullanmaktır. O çatal zorunda çünkü bu biraz daha yavaş çalışabilir, ama birkaç dakika içinde kod yazmak ve daha sonra tekrar yararlı bir şey üzerinde çalışıyoruz alabilirsiniz. Herhangi bir SQL komut dosyasını çalıştırmak için bir PHP komut dosyası yazıyorum size hafta sürebilir.

Eğer komut scriptler işlevlerinin yalnızca bir alt kümesini içeren emin değilseniz SQL komut dosyaları destekleyen, insanlar burada açıklayan ne daha karmaşıktır. Aşağıda satır satır yorumlamak için bir komut dosyası kod karmaşık hale sıradan bir SQL komut dosyası görünebilir bazı şeyler örnekleridir.

-- Comment lines cannot be prepared as statements
-- This is a MySQL client tool builtin command.  
-- It cannot be prepared or executed by server.
USE testdb;

-- This is a multi-line statement.
CREATE TABLE foo (
  string VARCHAR(100)
);

-- This statement is not supported as a prepared statement.
LOAD DATA INFILE 'datafile.txt' INTO TABLE foo;

-- This statement is not terminated with a semicolon.
DELIMITER //

-- This multi-line statement contains a semicolon 
-- but not as the statement terminator.
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
  SELECT COUNT(*) INTO param1 FROM foo;
END
// 

Sadece yukarıdakiler gibi bazı köşe durumlarda hariç, SQL komut bir alt kümesini, destek varsa, bir dosyayı okur ve dosya içinde SQL ifadeleri yürütür bir PHP komut dosyası yazmak için nispeten kolay. Eğer herhangi bir geçerli SQL komut desteklemek istiyorsanız Ancak, çok daha karmaşık.


Ayrıca ilgili sorulara benim cevap bakınız:

Benim önerim PHPMyBackup bir kaynak kodu bakmak olacaktır. Bu otomatik bir PHP SQL yükleyici bulunuyor. Bunu mysql_query bir seferde sadece tek bir sorgu yükler ve phpMyAdmin ve PHPMyBackup gibi projeler zaten SQL'ye doğru şekilde ayrıştırma sizin için zor işi yapmış bulacaksınız. P: o tekerleği yeniden icat etmeyin

Plahcinski çözümün güncelleştirilmiş bir çözüm. Alternatif olarak büyük dosyalar için fopen ve fread kullanabilirsiniz:

$fp = file('database.sql', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$query = '';
foreach ($fp as $line) {
    if ($line != '' && strpos($line, '--') === false) {
        $query .= $line;
        if (substr($query, -1) == ';') {
            mysql_query($query);
            $query = '';
        }
    }
}

Emin misin bu satıra onun değil bir sorgu? Metin editörü satırları sarma olabilir, ama gerçekte her sorgu tek bir satırda olabilir.

Her neyse Olle yöntemi iyi görünüyor. Eğer seferde sorguları birini çalıştırmak için nedenleri varsa, o zaman sınırlandırmak için her sorgunun sonunda noktalı virgül kullanmak, satır dosya doğrultusunda okumak gerekir. Bunu sizin sunucunun belleğinde çok nazik olacak gibi, muazzam bir dize bölmek çalışırken daha hattı ile bir dosya doğrultusunda okuma daha iyiyiz. Örnek:

$query  = '';
$handle = @fopen("/sqlfile.sql", "r");

if ($handle) {
    while (!feof($handle)) {
        $query.= fgets($handle, 4096);

        if (substr(rtrim($query), -1) == ';') {
            // ...run your query, then unset the string
            $query = '';
        }
    }

    fclose($handle);
}

Açıkçası, bir toplu sorguları bir sürü çalıştırıyorsanız eğer işlemleri ve dinlenme dikkate almak gerekir, ancak büyük bir ihtimalle yeni yüklemek komut dosyası için büyük bir anlaşma değil.

Eğer huge. Sql dosyaları almak düşünmüyorsanız, sadece belleğe tüm dosya okumak, ve bir sorgu olarak çalıştırın.

Ben PHP kullanılan beri bir süre oldu, bu nedenle, sahte kod var:

all_query = read_file("/my/file.sql")
con = mysql_connect("localhost")
con.mysql_select_db("mydb")
con.mysql_query(all_query)
con.close()

Dosyaları (birkaç megabayt üzerinden, diyelim ki) çok büyük olmadıkça, onu çalıştırmak için hiçbir neden yok-bir-zaman-hat, ya da denemek ve (yarma ; kullanarak, birden fazla sorgu bölmek hangi ben Sorgu dizeleri içinde yarı-iki nokta üst üste) varsa cam8001 cevabı yorumladı, kıracak ..

Navicat çöplük üzerinde çalışır. İlk / ** / comment navicat içeri koyar dökümü gerekebilir

$file_content = file('myfile.sql');
$query = "";
foreach($file_content as $sql_line){
  if(trim($sql_line) != "" && strpos($sql_line, "--") === false){
    $query .= $sql_line;
    if (substr(rtrim($query), -1) == ';'){
      echo $query;
      $result = mysql_query($query)or die(mysql_error());
      $query = "";
    }
  }
 }

& Yüklemek için en kolay ve hızlı yolu phpmyadmin dökümü veya MySQL dökümü dosyası ayrıştırmak ..

$ mysql -u username -p -h localhost dbname < dumpfile.sql 

Ben burada gördük çözümlerin hiçbiri DATA INFILE YÜKLEMEY erişimi olan sayılmaz bir sunucuda bir saklı yordam oluştururken sınırlayıcı değiştirmek gerek uğraşmak. Ben birileri bunu anlamaya phpMyAdmin kod koşuşturmak zorunda kalmadan bu çözülmüş olduğunu bulmak için umuyordum. Ben GPL kodunu kendim yazıyorum beri diğerleri gibi ben de bunu yaparken başkasının GPL'ed yol arıyor sürecinde oldu.

Bazı PHP kütüphaneler, çoklu SQL tabloların yapılmış bir SQL dosyası ayrıştırma düzgün patlayabilir (basit kullanarak değil ";" doğal patlayabilir), ve bunları yürütmek.

Örneğin, kontrol Phing 's PDOSQLExecTask

Sadece herkes için sorun düzeltilmesinde:

PHP'nin mysql_query, otomatik olarak her bir SQL komutları sonuna sınırlandırır, ve ayrıca kendi el kitabında bunu yaparken hakkında çok belirsiz. Tek bir komutla ötesinde her şey bir hata verecektir.

Diğer mysql_query SQL tarzı yorumlarınızı içeren bir dize ile gayet iyi, \ n, r \ ..

Mysql_query bir sınırlama SQL çözümleyici sonraki komut örneğin doğrudan olmak üzere sorunu raporları kendini ortaya koymaktadır

 You have an error in your SQL syntax; check the manual that corresponds to your
 MySQL server version for the right syntax to use near 'INSERT INTO `outputdb:`
 (`intid`, `entry_id`, `definition`) VALUES...

Here is a quick solution: (assuming well formatted SQL;

$sqlCmds = preg_split("/[\n|\t]*;[\n|\t]*[\n|\r]$/", $sqlDump);

Bu deneyin:

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

Benim projelerde ben sonraki çözümü kullandım:

<?php

/**
 * Import SQL from file
 *
 * @param string path to sql file
 */
function sqlImport($file)
{

    $delimiter = ';';
    $file = fopen($file, 'r');
    $isFirstRow = true;
    $isMultiLineComment = false;
    $sql = '';

    while (!feof($file)) {

        $row = fgets($file);

        // remove BOM for utf-8 encoded file
        if ($isFirstRow) {
            $row = preg_replace('/^\x{EF}\x{BB}\x{BF}/', '', $row);
            $isFirstRow = false;
        }

        // 1. ignore empty string and comment row
        if (trim($row) == '' || preg_match('/^\s*(#|--\s)/sUi', $row)) {
            continue;
        }

        // 2. clear comments
        $row = trim(clearSQL($row, $isMultiLineComment));

        // 3. parse delimiter row
        if (preg_match('/^DELIMITER\s+[^ ]+/sUi', $row)) {
            $delimiter = preg_replace('/^DELIMITER\s+([^ ]+)$/sUi', '$1', $row);
            continue;
        }

        // 4. separate sql queries by delimiter
        $offset = 0;
        while (strpos($row, $delimiter, $offset) !== false) {
            $delimiterOffset = strpos($row, $delimiter, $offset);
            if (isQuoted($delimiterOffset, $row)) {
                $offset = $delimiterOffset + strlen($delimiter);
            } else {
                $sql = trim($sql . ' ' . trim(substr($row, 0, $delimiterOffset)));
                query($sql);

                $row = substr($row, $delimiterOffset + strlen($delimiter));
                $offset = 0;
                $sql = '';
            }
        }
        $sql = trim($sql . ' ' . $row);
    }
    if (strlen($sql) > 0) {
        query($row);
    }

    fclose($file);
}

/**
 * Remove comments from sql
 *
 * @param string sql
 * @param boolean is multicomment line
 * @return string
 */
function clearSQL($sql, &$isMultiComment)
{
    if ($isMultiComment) {
        if (preg_match('#\*/#sUi', $sql)) {
            $sql = preg_replace('#^.*\*/\s*#sUi', '', $sql);
            $isMultiComment = false;
        } else {
            $sql = '';
        }
        if(trim($sql) == ''){
            return $sql;
        }
    }

    $offset = 0;
    while (preg_match('{--\s|#|/\*[^!]}sUi', $sql, $matched, PREG_OFFSET_CAPTURE, $offset)) {
        list($comment, $foundOn) = $matched[0];
        if (isQuoted($foundOn, $sql)) {
            $offset = $foundOn + strlen($comment);
        } else {
            if (substr($comment, 0, 2) == '/*') {
                $closedOn = strpos($sql, '*/', $foundOn);
                if ($closedOn !== false) {
                    $sql = substr($sql, 0, $foundOn) . substr($sql, $closedOn + 2);
                } else {
                    $sql = substr($sql, 0, $foundOn);
                    $isMultiComment = true;
                }
            } else {
                $sql = substr($sql, 0, $foundOn);
                break;
            }
        }
    }
    return $sql;
}

/**
 * Check if "offset" position is quoted
 *
 * @param int $offset
 * @param string $text
 * @return boolean
 */
function isQuoted($offset, $text)
{
    if ($offset > strlen($text))
        $offset = strlen($text);

    $isQuoted = false;
    for ($i = 0; $i < $offset; $i++) {
        if ($text[$i] == "'")
            $isQuoted = !$isQuoted;
        if ($text[$i] == "\\" && $isQuoted)
            $i++;
    }
    return $isQuoted;
}

function query($sql)
{
    global $mysqli;
    //echo '#<strong>SQL CODE TO RUN:</strong><br>' . htmlspecialchars($sql) . ';<br><br>';
    if (!$query = $mysqli->query($sql)) {
        throw new Exception("Cannot execute request to the database {$sql}: " . $mysqli->error);
    }
}

set_time_limit(0);

$mysqli = new mysqli('localhost', 'root', '', 'test');
$mysqli->set_charset("utf8");

header('Content-Type: text/html;charset=utf-8');
sqlImport('import.sql');

echo "Peak MB: ", memory_get_peak_usage(true)/1024/1024;

Test sql dosyasında (41MB) bellek yoğun kullanım: 3.25MB

Bu yararlı olabilir ->

Daha fazla veya daha az ne yapar ilk işlevine verilen dize almak (sizin file.sql ve file_get_contents () değer) ve tüm satır sonlarını kaldırmaktır. Sonra tarafından veri böler ";" karakter. Sonraki oluşturulduğu dizinin her satırında bakarak, bir süre döngüye gider. Hat "` "karakteri içeriyorsa, bu bir sorgu olduğunu biliyorum ve verilen satır veri için MyQuery () işlevini execture olacaktır.

Kod:

function myquery($query) {

mysql_connect(dbhost, dbuser, dbpass);

mysql_select_db(dbname);

$result = mysql_query($query);

if (!mysql_errno() && @mysql_num_rows($result) > 0) {
}

else {

$result="not";
}
mysql_close();

return $result;

}



function mybatchquery ($str) {

$sql = str_replace("\n","",$str)

$sql = explode(";",$str);

$x=0;

while (isset($str[$x])) {

if (preg_match("/(\w|\W)+`(\w|\W)+) {

myquery($str[$x]);

}

$x++

}

return TRUE;

}




function myrows($result) {

$rows = @mysql_num_rows($result);

return $rows;
}




function myarray($result) {

$array = mysql_fetch_array($result);

return $array;
}




function myescape($query) {

$escape = mysql_escape_string($query);

return $escape;
}



$str = file_get_contents("foo.sql");
mybatchquery($str);

Neden phpMyAdmin kodu almak ve kullanmak değil mi? Bu sonuçta Open Source ...

Bunu her zaman kullanabilirsiniz:

$sql = explode(";",file_get_contents('[your dump file].sql'));// 

foreach($sql as $query)
 mysql_query($query);

Bu aslında benim için çalıştı:

/* load sql-commands from a sql file */
function loadSQLFromFile($url)
{
    // ini_set ( 'memory_limit', '512M' );
    // set_time_limit ( 0 );

    global $settings_database_name;
    global $mysqli_object; global $worked; $worked = false;

    $sql_query = "";

    // read line by line
    $lines = file($url);
    $count = count($lines);

    for($i = 0;$i<$count;$i++)
    {
        $line = $lines[$i];
        $cmd3 = substr($line, 0, 3);
        $cmd4 = substr($line, 0, 4);
        $cmd6 = substr($line, 0, 6);
        if($cmd3 == "USE")
        {
            // cut away USE ``;
            $settings_database_name = substr($line, 5, -3);
        }
        else if($cmd4 == "DROP")
        {
            $mysqli_object->query($line); // execute this line
        }
        else if(($cmd6 == "INSERT") || ($cmd6 == "CREATE"))
        {
            // sum all lines up until ; is detected
            $multiline = $line;
            while(!strstr($line, ';'))
            {
                $i++;
                $line = $lines[$i];
                $multiline .= $line;
            }
            $multiline = str_replace("\n", "", $multiline); // remove newlines/linebreaks
            $mysqli_object->query($multiline); // execute this line
        }       
    }

    return $worked;
}
?>

Bazı adamlar (Plahcinski) bu kodu önerdi:

$file_content = file('myfile.sql');
$query = "";
foreach($file_content as $sql_line){
  if(trim($sql_line) != "" && strpos($sql_line, "--") === false){
    $query .= $sql_line;
    if (substr(rtrim($query), -1) == ';'){
      echo $query;
      $result = mysql_query($query)or die(mysql_error());
      $query = "";
    }
  }
 }

ama benim için çalıştı biri ile güncellemek istiyorsunuz:

 //selecting my database
    $database = 'databaseTitleInFile';
    $selectDatabase = mysql_select_db($database, $con);
    if(! $selectDatabase )
    {
      die('Could not select the database: ' . mysql_error());
    }
    echo "The database " . $database . " selected successfully\n";
//reading the file
    $file_path='..\yourPath\to\File';
    if(!file_exists($file_path)){
        echo "File Not Exists";
    }
    $file_content = file_get_contents($file_path);
    $array = explode("\n", $file_content)
//making queries
    $query = "";
        foreach($array as $sql_line){
$sql_line=trim($sql_line);
          if($sql_line != "" && substr($sql_line, 0, 2) === "--" && strpos($sql_line, "/*") === false){
            $query .= $sql_line;
            if (substr(rtrim($query), -1) == ';'){
              $result = mysql_query($query)or die(mysql_error());
              $query = "";
            }
          }
         }

Daha kapsamlı çünkü. ;-)