Hilfe bei Datenbank Create

matze93

Gesperrt
Ist es möglich mit PHP eine komplette .sql-Datei einzulesen und in die Datenbank zu übertragen oder muss man den Code in Zeile für Zeile umschreiben?
 
Sry. ich glaub ich hab mich unverständlich ausgedrückt. Ich möchte keinen Parser der meine .sql in PHP umschreibt. Ich habe meine Datenbanken in einer install.sql gespeichert und möchte mit der install.php diese einlesen und den Inhalt in meiner Datenbank speichern bzw. übertragen. Dabei möchte ich eigentlich nicht den Inhalt der install.sql in PHP umschreiben. Ist das möglich oder muss ich das doch umschreiben? Das war mit meiner zweiten Frage gemeint und nicht, dass ich einen Parser brauche.
 
Auch nicht das, was ich suche. Ich habe eine cms.sql und möchte die in meinem PHP Installer für meine CMS den Inhalt in die Datenbank übertragen, sowie das bei PHMyAdmin funktioniert (also in SQL-Format), ohne dass ich das ganze in PHP übersetze. Es soll also nicht in eine cms.php umgeschrieben werden, sondern direkt als SQL funktionieren. Dabei möchte ich nichts an der .sql-Datei ändern. Meine Frage: geht das, ohne dass man die einzelnen Tabellen trennen muss? Wie bekomme ich den Inhalt übertragen?
Danke nochmals
 
Ja, das geht mit LOAD DATA INFILE. Hast du die Seite überhaupt gelesen?

Edit: Wahlweise kannst du natürlich auch die komplette Datei einlesen, alle Semikolons exploden und dann über das Result-Array iterieren:

PHP:
// Dateiinhalte einlesen
$contents = file_get_contents($file);
// Anhand des Semikolons splitten
$sqls = explode(';', $contents);
// Über die SQL-Statements iterieren
foreach($sqls as $sql)
{
  // Jedes einzelne Statement ausführen.
  mysql_query($sql) or die (mysql_error());
}
 
Zuletzt bearbeitet:
Du kannst auch eine .spl importieren.

nehmen wir mal diese, etnweder du kopierst es oder machst eine .sql mit z.b. dem inhalt:
PHP:
CREATE TABLE IF NOT EXISTS `cabal` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `level` varchar(3) NOT NULL,
  `charname` varchar(50) NOT NULL,
  `rank` varchar(32) NOT NULL,
  `class` varchar(500) NOT NULL,
  `guild` varchar(500) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;

und importierst das mit phpmyadmin, falls du das meinst :P
 
Mal davon abgesehen, das gordonk absolut das korrekte gepostet hat, was sogar noch besser ist als das, was ich auf die Schnelle hingerotzt habe.
 
Nee, kein Import, sondern per PHP und nicht über PHPMyAdmin soll das installiert werden. Ist ja ein Installer für eine CMS!
thx @saftmeister: genau so etwas hab ich gesucht! Werde das mal testen!
 
Vorsicht mit explode. Was ist wenn irgendwo in nem textstring n semikolon vorkommt?


prinzipell würde, wenn du valides SQL in dem file hast und das file nicht zu gross ist auch einfach ein
PHP:
mysql_query(file_get_contents("filename"));
reichen. Ein query batch bei MySQL darf mehrere querys enthalten, und damit funktioniert das auch.
Solange keine SQL Firewall oder ähnliches im spiel ist.
 
Zurück