Ankündigung

Einklappen
Keine Ankündigung bisher.

Syntaxierung bei SQL-Strings

Einklappen

Neue Werbung 2019

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

  • Syntaxierung bei SQL-Strings

    Ich wollte euch mal fragen wie ihr es bei euren Mysqlstrings handhabt, weil ich bin mir am überlegen ob ich dies nicht genauso mache im Gegensatz zu jetzt.

    Also momentan sehen meine Sql-Strings z.b. so aus:

    Code:
    "SELECT * FROM ".$db_prefix."contents WHERE content_id = ".$_GET['content_id'];
    Jetzt hab ich mir aber gedacht das es sinnvoller ist mit ' zu arbeiten, um gegebenfalls bösen Buben das Handwerk zu legen. Das würde eben so aussehen:

    Code:
    "SELECT * FROM ".$db_prefix."contents WHERE content_id = '".$_GET['content_id']"'";
    Seht ihr da ein Unterschied technisch gesehn, weil in diesem Beispiel ist die ID vom Typ Interger. Das Benutzen von ' ist aber nicht nur auf ein SELECT bezogen, sondern auf alle Querys.

    bye h0nIg

  • #2
    Von SELECT * würde ich sowieso abraten, weil das länger dauert.

    Aber im Prinzip sehen meinen Querys so ähnlich aus. Benutzer allerdings noch eine Mysql Klasse die mir die querys noch mal säubert
    [B]Mfg Tomtaz[/B]
    [I]"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..." [/I]:!::shock:

    Kommentar


    • #3
      Und die wäre? Ich seh jetzt nicht welchen sqlstring du besser findest :>

      Kommentar


      • #4
        Hallo und willkommen im Forum
        Grundsätzlich solltest du keinen User-Input direkt im Query verwenden, sondern ihn stattdessen vorher escapen.

        Ich schreibe meine Queries meist so:
        PHP-Code:
        <?php
        $sSql 
        sprintf("SELECT `col1`, `col2` FROM `table` WHERE `id` = %u AND `name` = '%s'"$_GET['id'], $this->_quoteValue($_GET['name']));
        ?>
        quoteValue
        PHP-Code:
        <?php
        private function quoteValue($value)
        {
          if (
        get_magic_quotes_gpc()) {
            
        $value stripslashes($value);
          }
          return 
        mysql_real_escape_string($value$this->_connectionLink);
        }
        ?>
        Das heißt Eingaben, in denen ich eine Zahl erwarte, lasse ich von sprintf() in UNSIGNED INT (%u) umwandeln, alles restliche wird mit mysql_real_escape_string() abgesichert.

        Um noch auf deine direkte Frage zu antworten: Natürlich ist der 2. Query besser, er ist aber immernoch schlecht.
        Im 1. Query erzeugt alles, was keine Zahl ist einen Fehler und per GET lassen sich ja sofort Werte fälschen. Der 2. ist allerdings auch schlecht, denn er erlaubt ungeprüft alle Werte, läd aber zu SQL-Injections ein, sollte Magic Quotes deaktiviert sein. Der größte Graus eines PHP-Skriptes ist es, wenn es nur unter bestimmten Konfigurationen lauffähig oder sicher ist.
        Außerdem erwartest du ja eine Zahlenwert für content_id, warum also anderes erlauben?

        Du solltest dir also schon etwas mehr Mühe machen, die Eingabe-Werte zu validieren.

        Kommentar

        Lädt...
        X