MySQL, Apache oder PHP-Config: Nur eine Abfrage auf einmal zulassen?

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

  • MySQL, Apache oder PHP-Config: Nur eine Abfrage auf einmal zulassen?

    Hallo,

    man kann ja über PHP und anderen Tools mehrere SQL-Anweisungen durch Semikolon getrennt abfeuern, die dann nacheinander abgearbeitet werden.

    Ich habe noch dunkel in Erinnerung, das es möglich ist das Ganze so zu konfigurieren, das nur noch eine Anweisung verarbeitet wird und alles nach dem ersten Semikolon (sofern es nicht in Hochkomma steht) ignoriert wird.

    Erinnere ich mich da richtig und falls ja: wo finde ich die entsprechende Konfigrationseinstellung?

    Vielen Dank für Hilfe,
    Markus

  • #2
    Deine Frage ist zu ungenau.

    Die PHP-MySQL-Extension kann von Haus aus keine multiplen Statements. Es gibt scheinbar ein Flag was das steuert (PHP: mysql_query - Manual) aber vermutlich nur in aktuellen MySQL-Versionen.
    Bzgl. PDO konnte ich spontan gar nichts finden.
    PMA hat einen eigenen Parser und splittet mehrere Queries auf.

    Es macht aber auch eigentlich keinen Sinn innerhalb von Code mehrere Statements gleichzeitig auszuführen. Geschweige denn, dass es Sinn machen würde, mehrere Statements zu übergeben, aber dann nur das erste ausführen zu lassen.

    Anstatt das hier angesprochene Problem zu lösen, würde ich noch einen Schritt weiter zurück gehen, und dein komplettes Vorgehen noch mal überdenken.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      MySQLi beherrscht mehrfache Abfragen über die Methode multi_query. Vielleicht liegt es ja daran????

      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Zitat von ghostgambler Beitrag anzeigen
        Deine Frage ist zu ungenau.
        Ja, sorry, DBMS nicht erwähnt. Mea Culpa.

        Zitat von ghostgambler Beitrag anzeigen
        Es macht aber auch eigentlich keinen Sinn innerhalb von Code mehrere Statements gleichzeitig auszuführen. Geschweige denn, dass es Sinn machen würde, mehrere Statements zu übergeben, aber dann nur das erste ausführen zu lassen.

        Anstatt das hier angesprochene Problem zu lösen, würde ich noch einen Schritt weiter zurück gehen, und dein komplettes Vorgehen noch mal überdenken.
        Es ging auch nicht darum mehrere Queries zuzulassen, sondern es zu verhindern (deswegen auch meine Frage nach der Einstellungsoption, die das Ausführen auf eine Abfrage verhindert).

        Von da aus ist es durchaus sinnvoll beim Ausführen darauf zu achten das eben nur die Erste ausgeführt wird. Das Alleine bringt natürlich keinen umfassenden Schutz (Natürlich sind Queries schon vor der Übergabe ans DBMS so zu bearbeiten, das niemand damit Unfug anfangen kann), es schadet aber auch mit Sicherheit nicht das DBMS entsprechend zu konfigurieren (denn wie ein potentieller Angreifer Zugriff auf die DB hat, weiß ich nicht, bzw. ist der da sicherlich sehr kreativ). 100% Sicherheit gibt das nicht, aber ein paar Prozentpunkte mehr.

        Ob es übrigens Sinn oder keinen Sinn macht mehrere Queries nacheinander auszuführen, würde ich auch nicht mit einem pauschalen "macht eigentlich keinen Sinn" abtun, es gibt sicherlich Situationen in denen das auch hilfreich sein kann.

        Kommentar


        • #5
          Zitat von Lennynero Beitrag anzeigen
          Ja, sorry, DBMS nicht erwähnt. Mea Culpa.
          Und schon wieder

          Es geht um MySQL.

          Kommentar


          • #6
            Willst du Sicherheit, dann verwende prepared Statements.

            Die veraltete mysql-Extension unterstützt gar keine Multi-Queries. Die mysqli-Extension kann dies optional über multi_query(). PDO lässt Multi-Queries immer zu. Also nett formuliert: Anfänger sollten zuerst lieber mit mysqli arbeiten. Leute mit Erfahrung können bzw. sollten zu PDO greifen.

            mysql ist als tot anzusehen.
            Zuletzt geändert von h3ll; 12.12.2011, 12:25.

            Kommentar


            • #7
              Danke.

              Meine Frage zielte eigentlich in erster Linie auf die Konfigutarion des MySQL Servers, nicht auf PHP-Erweiterung.

              Kommentar


              • #8
                Wenn du das am MySQL-Server deaktivieren _könntest_, würde sehr viel nicht mehr funktionieren. Also welchen Sinn soll das haben, außer dass du dir den Server kaputt machst?

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Wenn du das am MySQL-Server deaktivieren _könntest_, würde sehr viel nicht mehr funktionieren. Also welchen Sinn soll das haben, außer dass du dir den Server kaputt machst?
                  Dessen war ich mir nicht bewusst.

                  Die Idee war es zu verhindern das jemand nicht befugtes in der Lage ist mehrere Queries auf einmal auszuführen, nicht mehr nicht weniger (und ja, mir ist durchaus bewusst das man mit einer einzigen Query schon Unfug genug anstellen kann). Wenn sich das auf einen Besucher hätte beschränken lassen, umso besser. Wenn es nicht (sinnvoll) geht, dann scheidet das halt aus. Mehr wollte ich im Grunde nicht wissen.

                  Kommentar

                  Lädt...
                  X