PDO::exec vs. PDO::query

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

  • PDO::exec vs. PDO::query

    Hallo,

    ich bin von MySQL immer die Abfrage mittels mysql_query gewohnt.

    Nun bietet mir PDO aber PDO::query und auch PDO::exec an.

    PDO::query führt eine Abfrage aus und liefert ein Objekt zurück, PDO::exec hingegen nur die Anzahl der betroffenen Zeilen. Bei den Beispielen wird PDO::query für SELECTS und PDO::exec für INSERTS und DELETES verwendet.

    Muss ich zwingend PDO::exec verwenden oder kann ich weiterhin für alles PDO::query verwenden? Und bei Bedarf (INSERT/DELETE) die betroffenen Zeilen einfach mittels
    PHP-Code:
    echo $db->rowCount(); 
    ausgeben lassen?

    Danke,
    Trunci

  • #2
    Hi Truncate,

    du musst nur beachten, dass exec eine Funktion der Klasse PDO ist, und rowCount eine Funktion der Klasse PDOStatement.

    PHP-Code:
    <?php
    $conn 
    = new PDO("mysql:host=localhost;dbname=test""guenni""guenni");
      
     
    /*
    * Aufruf der PDO-Klassenfunktion
    */
    $query "delete from tabelle2 where id=25"
    $num_rows $conn->exec($query);
    echo 
    $num_rows;
     
    /*
    * Aufruf der PDOStatement-Klassenfunktion
    */
    $query "delete from tabelle2 where id=23";
    $stm $conn->prepare($query);
    $stm->execute();
    $num_rows $stm->rowCount();
    echo 
    $num_rows
    ?>
    Gruß
    Günni

    Kommentar


    • #3
      Zitat von Truncate Beitrag anzeigen
      Hallo,
      Nun bietet mir PDO aber PDO::query und auch PDO::exec an.

      PDO::query führt eine Abfrage aus und liefert ein Objekt zurück, PDO::exec hingegen nur die Anzahl der betroffenen Zeilen. Bei den Beispielen wird PDO::query für SELECTS und PDO::exec für INSERTS und DELETES verwendet.
      Weil bei INSERT- und DELETE-Operationen im Allgemeinen nur die Anzahl der geänderten Datensätze interessiert, gibts dafür die (eigentlich unnötige) Funktion PDO->exec().

      Muss ich zwingend PDO::exec verwenden oder kann ich weiterhin für alles PDO::query verwenden? Und bei Bedarf (INSERT/DELETE) die betroffenen Zeilen einfach mittels
      PHP-Code:
      echo $db->rowCount(); 
      ausgeben lassen?
      Du musst PDO->exec() nicht verwenden. Wie Guenni61 schon schrob, kannst du aber die Anzahl der Datensätze nicht direkt aus dem PDO(-Datenbank-Verbindungs-)Objekt ablesen. Das geht nur über das PDOStatement-Objekt.

      Sobald du übrigens Benutzer-generierte Variablen in SELECT/DELETE/UPDATEs einbaust, musst du das Statement-Objekt benutzen, da scheidet dann auch PDO->query() aus:

      PHP-Code:
      $dbconn = new PDO(...); // Datenbank-Verbindung
      $stmt PDO->prepare($sqlquerystring);
      if (!
      $stmt->execute($arguments)) {
          die(
      'Shit happens!');
      }

      if (
      __DELETE_OR_UPDATE_OPERATION__) {
          
      printf('Number of records wrecked: %s'$stmt->rowCount());
      }

      if (
      __SELECT_OPERATION__) {
          foreach(
      $stmt as $key => $record) {
              
      printf('Dumping record no: %s'$key);
              
      var_dump($record);
          }

      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar

      Lädt...
      X