hawkmaster: PDO maskieren wie mysql_real_escape_string

Hallo
ich mache gerade die ersten Versuche mit PDO. Ich möchte mal sehen ob sich ein Umstieg lohnen würde und wie aufwendig das ist.

Gibt es hier eigentlich etwas wie "mysql_real_escape_string" oder muss man bei PDO nichts maskieren?

vielen Dank
Gruss
hawk

  1. echo $begrüßung;

    Gibt es hier [PDO] eigentlich etwas wie "mysql_real_escape_string" oder muss man bei PDO nichts maskieren?

    Kommt drauf an. Wenn du Prepared Statements verwendest, dann kümmert das sich um die gefahrlose Übertragung der Werte. Wenn du deine Daten selbständig in die Query einbauen möchtest, um es mit PDO->query() zu versenden, dann gibt es PDO->quote().

    echo "$verabschiedung $name";

    1. Vielen Dank dedlfix,

      ich lese zwar schon viel im PDO manual aber es ist halt doch recht neu für mich. Zumal ich mich bisher auch nicht so mit der objektorientierten Programmierung beschäftigt habe.

      Du scheinst dich gut mit PDO auszukennen.Darf ich dich nochmals zu meinem ersten Versuch was fragen:
      So war es bsiher mit mysql():
      ----------------------------------------------------
      $sql_rootdir = mysql_query("SELECT ConfigDirectoriesPath  FROM configdirectories WHERE ConfigDirectoriesName = 'RootDirectories'") or mysql_error();
      $row_rootdir = mysql_fetch_array($sql_rootdir);
      if(($row_rootdir['ConfigDirectoriesPath'] == "")OR ($row_rootdir['ConfigDirectoriesPath'] != ROOTDIR) ){
      $valueroot = addslashes(ROOTDIR);
      $sqldirectories = "UPDATE configdirectories SET ConfigDirectoriesPath='$valueroot' WHERE ConfigDirectoriesName = 'RootDirectories'";
      mysql_query($sqldirectories, $MYSQL['LINK']);
      }
      ------------------------------------------------
      Mein versuch  nun mit PDO:
      erst der Aufbau:
      try {
       $DBO = new PDO('mysql:host=localhost;dbname=test_v8', $MYSQL['USER'], $MYSQL['PWD']);

      } catch (PDOException $e) {
         print "Error!: " . $e->getMessage() . "<br/>";
         die();
      }

      Dann;
      $dboResult = $DBO->query("SELECT ConfigDirectoriesPath  FROM configdirectories WHERE ConfigDirectoriesName = 'RootDirectories'");
      $result = $dboResult->fetch();

      if(($result['ConfigDirectoriesPath'] == "")OR ($result['ConfigDirectoriesPath'] != ROOTDIR) ){
       $valueroot = addslashes(ROOTDIR);
       $DBO->exec("UPDATE configdirectories SET ConfigDirectoriesPath='$valueroot' WHERE ConfigDirectoriesName = 'RootDirectories'");
      }

      Ist das soweit ok?
      oder wäre hier schon ein Prepared Statement angebracht oder einfacherweise "quote()"?

      Gibt es einen Ersatz für
      "or mysql_error()" ??
      oder macht PDO dies automatisch wenn ein Fehler auftritt?

      vielen Dank nochmals
      Gruss
      hawk

      1. echo $begrüßung;

        Mein versuch  nun mit PDO:
        erst der Aufbau:
        try {
        $DBO = new PDO('mysql:host=localhost;dbname=test_v8', $MYSQL['USER'], $MYSQL['PWD']);
        } catch (PDOException $e) {
           print "Error!: " . $e->getMessage() . "<br/>";
           die();
        }

        Um PDO-Exceptions verwenden zu können, muss man die erst freigeben. PDO->setAttribute(PDO::ERRMODE_EXCEPTION). Das Script bei einem Fehler zu töten, halte ich nicht für benutzerfreundlich, eher für Fahrerflucht. So eine Textmeldung versaut einem das schöne, mühsam erstellte Design der Seite. Der Meldungstext ist nur für das Debugging hilfreich, der Anwender kann und soll damit nichts anfangen. Gib ihm eine Tröstmeldung, die sich anstelle des Datenbankergebnisses in den Rest der Seite integriert.

        $valueroot = addslashes(ROOTDIR);
        Ist das soweit ok?
        oder wäre hier schon ein Prepared Statement angebracht oder einfacherweise "quote()"?

        addslashes() macht irgendwas, nur nicht das zur Datenbank gehörende Escaping. Das macht PDO->quote().

        Gibt es einen Ersatz für "or mysql_error()" ??
        oder macht PDO dies automatisch wenn ein Fehler auftritt?

        Siehe obigen Link. PDO kennt drei Arten, aufgetretene Fehler zu melden. Du kannst dir eine davon auswählen.

        echo "$verabschiedung $name";