Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Datei mit PHP importieren?!

Einklappen

Neue Werbung 2019

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

  • SQL Datei mit PHP importieren?!

    Hi Leute!

    Entweder ich steh grad aufm Schlauch, oder es geht nicht. Wie importiert man denn bitte eine *.sql - Datei mit PHP in die Datenbank. Also ich schreibe gerade ein einer Installationssoftware von einem CMS, und darin soll eben auch die Datenbank installiert werden.

    Hab eine datenbank.sql Datei.

    Mit welchem Befehl importiere ich die *.sql - Datei in die Datenbank?!?

    Geht das überhaupt irgendwie?!
    Mit welchem Befehl?

    Matze

  • #2
    Habs jetzt noch nie direkt in PHP versucht, aber lese dir mal den Inhalt der .sql-Datei aus und schreib alles in ein mysql_query() rein.

    Kommentar


    • #3
      Das wird so nicht gehen, da mysql_query() nur eine Abfrage durchführen kann.

      Du musst also deine .sql-Datei auslesen, in einzelne Abfragen aufsplitten und diese per Schleife und mysql_query() nacheinander durchjagen.

      Ob es hierzu schon eine fertige Funktion zum importieren von *.sql-Files seitens PHP gibt, weiß ich nicht. Vielleicht spuckt Google etwas darüber aus

      Schon mal in phpMyAdmin nachgeschaut, wie die das hand haben mit import von *.sql-Dateien?

      Grüße
      Da Psy
      [I]"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)[/I]

      Kommentar


      • #4
        Ah stimmt, hab grade in der Datei nachgeschaut in der ich selber mal sowas programmiert habe! Ich habe einfach den Inhalt des *.sql-Files bei folgenden Keywords getrennt: DROP, CREATE, INSERT - und dann habe ich für jeden dieser drei Teile ein mysql_query() ausgeführt.
        Kommt aber natürlich drauf an, was man beim Exportieren alles einstellt etc.

        Kommentar


        • #5
          Da bei sql Dateien die einzelnen Befehle durch einen ";" getrennt werden und die Kommentare, welche in der sql-Datei vorkommen ebenfalls als Kommentare von mysql_query() interpretiert werden, kann man auch einfach bein den Strichpunkten trennen.
          Sieht dann in etwa so aus:
          PHP-Code:
          $queries explode(";",$sql);

          foreach(
          $queries as $query)
              
          mysql_query($query,$conn); 
          Hoffe das hilft weiter.

          Kommentar


          • #6
            Und was ist, wenn da irgend ein Feld ist, das einen Text gespeichert hat, der einen ; drin hat? Dann ist alles kaputt ^^ Naja ist mit DROP, CREATE etc auch so, aber meiner Meinung nach ist es unwahrscheinlicher, dass genau DROP, CREATE oder INSERT in einem Text vorkommt als ein ;.

            Kommentar


            • #7
              Lösung

              Ich habs nun ähnlich gelöst:

              PHP-Code:
                 $import file_get_contents("dateixyz.sql");

                 
              $import preg_replace ("%/\*(.*)\*/%Us"''$import);
                 
              $import preg_replace ("%^--(.*)\n%mU"''$import);
                 
              $import preg_replace ("%^$\n%mU"''$import);

                 
              mysql_real_escape_string($import); 
                 
              $import explode (";"$import); 

                 foreach (
              $import as $imp){
                  if (
              $imp != '' && $imp != ' '){
                   
              mysql_query($imp);
                  }
                 } 
              Funkioniert bestens!

              Kommentar


              • #8
                Ich möchte in der zu importierenden Datei Variablen einsetzen. Ist das möglich?

                Kommentar


                • #9
                  warum nicht

                  entweder du suchst und ersetzt per Regular Expressions oder du lässt dir die zu importierende Datei per Skript zusammenstellen
                  twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

                  $live->free() OR die();

                  Kommentar


                  • #10
                    ah hab zu schnell gepostet hab schon gelöst

                    danke für deine antwort

                    Kommentar


                    • #11
                      dann lass uns doch an deiner lösung teilhaben
                      twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

                      $live->free() OR die();

                      Kommentar


                      • #12
                        Hmm, also ich hätte mehr Angst vor englischem Feldinhalt als vor einem Semikolon! Es muss ja nur jemand einen Brief ERSTELLEN, den Kugelschreiber FALLENLASSEN und dann die Miene wieder EINSETZEN

                        Eine sichere Lösung könnte man durch eine Vorabprüfung hinbekommen. Das wird aber vermutlich aufwendig:

                        - Escape-Zeichen auslesen
                        - ``
                        - ...

                        Vieleicht reicht Dir ja auch eine Kombination:

                        1. explode am Semikolon
                        2. Check, ob alle statements mit einem Kommentarzeichen oder reservierten Wort beginnen.
                        3. ggf. Fehlermeldung ausgeben, so hast Du zumindest keinen halben Import in Deiner DB.

                        Kommentar


                        • #13
                          Also, das ist wirklich eine Kosten-Nutzen bzw. Aufwand-Sicherheit Rechnung.

                          Ich denke
                          (Textanfang + Whitespace* | Semikolon + Whitespace* + Zeilenumbruch) + [INSERT|DROP|CREATE ...]
                          könnte man als hinreichendes Kriterium für ein beginnendes Statement ansehen. Vorher würde ich noch alle Kommentare entfernen.
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #14
                            Das wird so nicht gehen, da mysql_query() nur eine Abfrage durchführen kann.
                            Deswegen sollte man mysqli nehmen (multiquery-fähig).
                            Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                            Kommentar

                            Lädt...
                            X