79 Stimmen

Laden von .sql-Dateien aus PHP heraus

Ich erstelle ein Installationsskript für eine Anwendung, die ich gerade entwickle, und muss Datenbanken dynamisch aus PHP heraus erstellen. Ich habe es geschafft, die Datenbank zu erstellen, aber jetzt muss ich mehrere .sql-Dateien laden. Ich hatte geplant, die Datei zu öffnen und mysql_query eine Zeile nach der anderen abzufragen - bis ich mir die Schemadateien ansah und feststellte, dass sie nicht nur eine Abfrage pro Zeile sind.

Wie lade ich also eine SQL-Datei aus PHP heraus (wie phpMyAdmin es mit seinem Import-Befehl tut)?

2voto

Plahcinski Punkte 335

Funktioniert mit Navicat-Dumps. Möglicherweise müssen Sie den ersten /* */-Kommentar, den Navicat einfügt, ausgeben.

$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 = "";
    }
  }
 }

2voto

Ricky Punkte 29

Dies ist der beste Code für die Wiederherstellung Sql von php verwenden können 100% Goooood! Vielen Dank

$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 = "";
  }
 }
}

2voto

Nono Punkte 6368

Versuchen Sie dies:

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

2voto

Nemanja Punkte 29

Der einfachste und schnellste Weg, phpmyadmin dump oder mysql dump Dateien zu laden und zu parsen.

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

2voto

dbr Punkte 158949

Es sei denn, Sie planen die Einfuhr von riesig .sql-Dateien, lesen Sie einfach die gesamte Datei in den Speicher und führen Sie sie als Abfrage aus.

Es ist eine Weile her, seit ich PHP benutzt habe, also Pseudocode:

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

Sofern die Dateien nicht riesig sind (z. B. über mehrere Megabyte), gibt es keinen Grund, sie zeilenweise auszuführen oder zu versuchen, sie in mehrere Abfragen aufzuteilen (durch Aufteilung mit ; was, wie ich in der Antwort von cam8001 kommentiert habe, zu einem Bruch führt, wenn die Abfrage Semikolons in Zeichenketten enthält)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X