PDA

Vollstndige Version anzeigen : SQL Datei einbinden


noerion
17-10-2003, 11:45
hallo

ich habe ein 15 MB groe SQL Datei, da PHPAdmin rumspinnt will ich ein eigenes scipt schreiben das diese SQL daten in die DB bringt.
in der Datei sind ja alle befehle zum erstellen enthalten, nur wie kriege ich PHP dazu, die Daten an die DB zu senden und nicht auf den Bildschirm zu schmeien

habe es so probiert,
$sql=include("c:/orgdaten/sql/daten.sql");
$result=mysql_querry($sql);
geht aber nicht, was mache ich fallsch?

diver-network
17-10-2003, 12:18
Hi,

Dein include() Befehl ist m.E. in jedem Fall falsch:

Schmei mal den absoluten Pfad zur Datei mit c:/ raus und verwende statt dessen "./" bzw. "../", je nachdem, von wo aus Du die Datei aufrufst. Ansonsten geht auch include ("http://localhost/...");.

Zweitens kann es auch noch an der Datei selber liegen. Diese sollte zumindest so aussehen:
<?php
$sql = "der gesamte SQL String";
php?>

Eine andere, elegantere Mglichkeit ist es, den inhalt der Datei in eine Variable zu packen, dies geht mit file_open() oder so hnlich. Schlag hierzu mal die entsprechenden Datei Befehle in SelfPHP nach.

HTH,

Andy

chris17
17-10-2003, 12:25
Hallo zusammen,

vielleicht geht's so:
<?php
$host= 'localhost';
$user= 'root';
$pass= '123456';
$db= 'datenbank';

$datei = "daten.sql";
$pfad = "./";

system(sprintf("mysql -h %s -u %s -p%s %s < %s/$datei", $host, $user, $pass, $db, $pfad));
?>

Gruss

chris17

noerion
17-10-2003, 12:39
hab es jetzt so hingebastelt

$fp = fopen("daten.sql","r"); // Absoluter Pfad
$result=mysql_query($fp);
nur einfgen tut er die Daten trotzdem nicht

$fp = readfile("daten.sql")
bringt auch nichts, gibt er den Kram nur auf dem Bildschirm aus. muss es doch irgendwie an die DB gesendet kriegen?

diver-network
17-10-2003, 13:43
Hi,

ich hoffe, Du ffnest die Verbindung zur DB vorher:

mysql_connect() (Verbinden an DB Server)
mysql_select_db() (Auswahl der richtigen DB)
myslq_select(SQL Befehl) !! (SQL ausfhren)

So, ich hoffe, ich habe jetzt so aus dem Kopf raus nichts vergessen bzw. verwechselt.
Schau doch mal bei SelfPHP nach den MySQL Befehlen. Bei fast jedem Beispiel steht drin, welche Befehle in welcher Reihenfolge kommen.

HTH,

Andy


Verwende fr Deine INSERTS sogeannnte erweiterte INSERTS. Diese sind gerade bei groen Datenmengen schneller.
Also:
INSERT INTO (felder) VALUES (wertepaar 1),... (wertepaar n);
statt
INSERT INTO (felder) VALUES (wertepaar 1);
...
INSERT INTO (felder) VALUES (wertepaar n);

chris17
17-10-2003, 15:20
Hallo nochmal,

$fp = fopen("daten.sql","r"); // Absoluter Pfad
$result=mysql_query($fp);

Das geht nicht. Die Datei ist "nur" zum lesen geffnet. Jetzt muss sie dann auch eingelesen werden.
Bsp. um eine Datei einzulesen...

$fp = fopen("daten.sql","r");
while(!feof($fp)){
$zeile = fgets($fp); // Hier kann bei PHP >= 4.3 die Zeilenlnge weggelassen werden
echo $zeile."<br>"; // TESTAUSGABE
// Wenn in $zeile ein sauberes SQL-Statement stehen wrde,
// knnte man hier in die DB schreiben
}
fclose($fp);
Wie wurde die SQL-Datei erstellt? Mit phpMyAdmin?
Dann hast Du noch etliche Zeilen mit Kommentaren etc., die Du "filtern" msstest.

Probier doch mal das Skript aus, dass ich gepostet habe. Funktioniert normalerweise mit einem MySQL-Dump tadelos.
Voraussetzung ist, dass das MySQL-Dienstprogramm "mysql" vorhanden ist... (Linux-Server?)

Ob's wegen den 15MB Probleme geben knnte, weiss ich nicht.

Grsse

Christian