SQL Datei per PHP ausführen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL Datei per PHP ausführen

    Ich möchte gern eine .sql Datei über den Browser ausführen.
    Es soll so aussehen, dass es ein Button auf einer Seite gibt, der angeklickt werden muss, um dann die Befehle in der SQL Datei auszuführen.

    Habe das leider so noch nie gemacht, sondern immer nur händich über PHPMyAdmin.

    Wer könnte mir da bitte weiterhelfen?
    Vielen Dank schonmal!

  • #2
    mysql_query() und Konsorten helfen weiter. Infos dazu im PHP-Handbuch und in den einschlägigen Manuals wie
    http://www.schattenbaum.net/php/

    Kommentar


    • #3
      http://dev.mysql.com/doc/refman/5.1/de/batch-mode.html
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Danke, das hat mir schonmal weitergeholfen

        Der Code sieht jetzt so aus.

        PHP-Code:
        foreach ( file('db.sql') as $zeile)
          {
            echo 
        "$zeile<br>";
            
        $result mysql_query($zeile) or die ("Fehler:<br>".mysql_error()."<br><br>$Sql");
          } 
        Leider erhalte ich eine Fehlermeldung

        Query was empty
        Werde mal meine SQL Datei durchforsten, die sollte aber richtig sein, da ich die Befehle, wenn ich sie direkt in PHPMyAdmin einfüge, klaglos funktioniert.
        Oder liegt es daran, dass die SQL Datei mit PHPMyAdmin erstellt wurde. Habe gelesen, dass es da zu Problemen kommen kann.
        Zuletzt geändert von errorist; 08.01.2008, 11:08.

        Kommentar


        • #5
          PHP-Code:
          $sql "source db.sql"
          Wenn in der db.sql gültiges SQL steht, dann kannst du das ganze File mit einer Query einlesen.
          Wieso willst du es Zeile für Zeile? Das kann nicht klappen, wenn z.B. eine Anweisung (wie insert oder select) über mehrere Zeilen geht.

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Ich will es nicht so, ich habe es nicht anders hinbekommen. Daher such ich ja ne Möglichkeit es hinzubekommen, da ja die CREATE und INSERT Sachen über mehrere Zeilen gehen

            EDIT:
            Habe einfach die SQL bearbeitet und alle Create etc in einer Zeile geschrieben und scheint zu klappen.

            DAnke für die schnelle und kompetente Hilfe!
            Zuletzt geändert von errorist; 08.01.2008, 11:37.

            Kommentar


            • #7
              Daher such ich ja ne Möglichkeit es hinzubekommen, da ja die CREATE und INSERT Sachen über mehrere Zeilen gehen
              Und genau dafür ist source resp \.
              Den Pfad zur SQL Datei musst du natürlich schon korrekt angeben. Nur der Name wird kaum reichen ($_SERVER['DOCUMENT_ROOT'] kann helfen)
              Btw: Wieso alles in einer Zeile? Eine korrekte SQL Datei kann über x-beliebig viele Zeilen gehen. Hast du mal eine DB-Export Datei angeschaut. Dort steht auch nicht alles auf einer Zeile und kann trotzdem in einem Zug eingelesen werden.
              Zuletzt geändert von jahlives; 08.01.2008, 11:39.
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Sorry, jetzt steh ich auf dem Schlacuh mit SOURCE.
                Wie muss das genau aussehen?

                Kommentar


                • #9
                  Na ich würde das mal so probieren
                  PHP-Code:
                  $sql "source ".$_SERVER['DOCUMENT_ROOT']."/path/to/db.sql";
                  mysql_query($sql) OR die(mysql_error()); 
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    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 ''source E:/Programme/xampp/htdocs/testdaten/db.sql' at line 1' at line 1
                    Die SQL Syntax beginnt bei mir so

                    CREATE DATABASE rm;
                    SHOW databases;
                    USE rm;
                    CREATE TABLE

                    Was hat das zu bedeuten?
                    Sorry, für die dummen Fragen.
                    Zuletzt geändert von errorist; 08.01.2008, 13:21.

                    Kommentar


                    • #11
                      http://www.phpfriend.de/forum/ftopic62425.html

                      Das hat geholfen!

                      An alle hier ein dickes Danke für eure Mühe!

                      Kommentar


                      • #12
                        SOURCE ist kein SQL-Befehl, sondern ein internes Kommando des MySQL-Monitors und kann damit natürlich nicht mit PHP angewendet werden. Das im Link genannte Script von Zergling ist eine Möglichkeit.
                        Eine Einfachere wäre, sofern das Script keine SELECT- und SHOW-Befehle enthält:
                        PHP-Code:
                        $input file_get_contents($file);
                        $cmds explode(';'$input);
                        foreach(
                        $cmds as $cmd){
                            
                        mysql_query($cmd) || die("Error: " mysql_error() . "<br />Cmd: $cmd<br />");

                        Bedingung ist natürlich, dass du dem Script bedingungslos vertrauen kannst.
                        Gruss
                        H2O

                        Kommentar


                        • #13
                          Original geschrieben von H2O
                          SOURCE ist kein SQL-Befehl, sondern ein internes Kommando des MySQL-Monitors und kann damit natürlich nicht mit PHP angewendet werden. Das im Link genannte Script von Zergling ist eine Möglichkeit.
                          Eine Einfachere wäre, sofern das Script keine SELECT- und SHOW-Befehle enthält:
                          PHP-Code:
                          $input file_get_contents($file);
                          $cmds explode(';'$input);
                          foreach(
                          $cmds as $cmd){
                              
                          mysql_query($cmd) || die("Error: " mysql_error() . "<br />Cmd: $cmd<br />");

                          Bedingung ist natürlich, dass du dem Script bedingungslos vertrauen kannst.
                          Und daß es keine Semikola enthält.
                          Besser: FROM INFILE oder wie das heißt
                          Zuletzt geändert von pekka; 09.01.2008, 10:18.

                          Kommentar


                          • #14
                            Original geschrieben von pekka
                            Besser: FROM INFILE oder wie das heißt
                            LOAD DATA FROM INFILE ist ein SQL-Befehl, und dient nicht zur Ausführung von solchen, sondern nur zum schnellen Laden von Daten!
                            Gruss
                            H2O

                            Kommentar


                            • #15
                              Da hast du natürlich recht, verpeilt.

                              Kommentar

                              Lädt...
                              X