Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql bei php7

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von Patt Beitrag anzeigen

    ok das leuchtet ein, aber mein Formular benutze nur ich, dann sollte htaccess reichen
    Nope.
    Wenn du deine SQL-Abfragen absicherst geht es nicht nur darum deine Datenbank vor Schadcode (SQL-Injections) zu schützen - das ist eher der nette Nebeneffekt.
    Es geht auch darum zu verhindern, dass Eingaben irgendwie mit der SQL-Syntax aneinander geraten und dadurch eine Zeichenkette bilden die z.B. deinen Query-String beenden udn dadurch dann unvollständig zur Datenbank geschickt würden.. wenn das Programm an der Stelle nicht abbrechen würden.

    Das klassische Beispiel
    PHP-Code:
    $nachname $_POST['nachname']; // Hier steht jetzt einfach mal O'Connor drauf
    $sql "SELECT * FROM personen WHERE nachname = '$nachname'";
    echo 
    $sql
    Das würde dann erstmal als SELECT * FROM personen WHERE nachname = 'O'Connor' An die Datenbank geschickt werden.

    Es ist nicht schwierig sich da kurz einzulesen und die Umsetzung ist auch richtig easy, wenn man erstmal gesehen hat worauf es ankommt.
    https://php-de.github.io/jumpto/kontextwechsel/
    https://php-de.github.io/jumpto/sql-injection/


    https://php-de.github.io/jumpto/pdo/

    Das obige Beispiel würde über PDO und mit Prepared Statements so aussehen:
    PHP-Code:
    $sql "SELECT * FROM personen WHERE nachname = ?";
    $statement $pdo->prepare($sql);
    $statement->execute([$nachname]); 
    Du setzt die Werte also nicht direkt in die Abfrage ein sondern nutzt erstmal einen Platzhalter.
    Anstatt direkt mysql_query($sql) aufzurufen, kommt stattdessen erst die prepare()-Methode damit die Datenbank die Struktur der Abfrage schon einmal verarbeiten kann und anschließend sendest du mit der execute()-Methode ein Array mit deinen Werten hinterher.

    Als kleines extra, nachdem du die execute()-Methode aufgerufen hast, ist das statement bei der Datenbank immer noch einsatzbereit. Das heißt du könntest direkt noch einmal execute aufrufen und die Abfrage würde nochmal ausgeführt werden. Bei Selects macht das natürlich nur begrenzt Sinn, wenn du aber mehrere Inserts in die gleiche Tabelle ausführen möchtest ist das schon praktisch.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #17
      Zitat von VPh Beitrag anzeigen

      Das obige Beispiel würde über PDO und mit Prepared Statements so aussehen:
      PHP-Code:
      $sql "SELECT * FROM personen WHERE nachname = ?";
      $statement $pdo->prepare($sql);
      $statement->execute([$nachname]); 
      Ich mache das immer so:
      PHP-Code:
      $sql $pdo->prepare("SELECT * FROM personen WHERE nachname = :nachname;");
      $sql->bindParam(':nachname'$nachname);
      $sql->execute(); 
      Wobei "SELECT * ... " eigentlich ein no-go ist

      Kommentar

      Lädt...
      X