Ankündigung

Einklappen
Keine Ankündigung bisher.

PDO: Wie Zeilen zählen?

Einklappen

Neue Werbung 2019

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

  • PDO: Wie Zeilen zählen?

    Hallo

    ich arbeite mich gerade ein wenig in PDO ein.
    Nun erstelle ich ein Script wo geprüft wird ob eine E-Mail-Adresse doppelt vor kommt.

    Wenn ja dann soll ein Fehler gespeichert werden, wenn nein soll es weiter im Script gehen.

    Folgendes Funktioniert bei mir einwandfrei, jedoch wäre es toll wenn ihr mal ein Blick drüber werfen könnt, ob es auch so korrekt ist:

    PHP-Code:
                $sql "SELECT * FROM tblkunde WHERE email = :email";
                
    $q $conn->prepare($sql);
                
    $q->bindValue(':email'$_POST['email'], PDO::PARAM_STR);
                
    $q->execute();
                
    $anz $q->rowCount();
                if (
    $anz 0) { $fehler['email'] = "(eMail-Adresse schon registriert!)"; } 

  • #2
    Code:
    SELECT COUNT(*) AS resultCount FROM tblKunde WHERE email = :email
    rowCount() ist nicht _explizit_ auf allen Datenbanken die PDO kann verfügbar, also generell nicht verlässlich.

    Kommentar


    • #3
      Die Verwendung von PDO sieht richtig aus, für alle Fälle solltest du aber das wissen:
      If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.
      Den SQL-Query würde ich aber von vorneherein anders gestalten, da du ja nur wissen willst, ob ein Datensatz existiert. Beispiel:
      Code:
      SELECT 1 FROM tblkunde WHERE email = :email LIMIT 1
      Die Spalten, die du ja nicht brauchst, werden so gar nicht zurückgegeben und es wird nach dem ersten Treffer auch nicht weiter gesucht.

      Kommentar


      • #4
        Zitat von fab Beitrag anzeigen
        Die Verwendung von PDO sieht richtig aus, für alle Fälle solltest du aber das wissen:


        Den SQL-Query würde ich aber von vorneherein anders gestalten, da du ja nur wissen willst, ob ein Datensatz existiert. Beispiel:
        Code:
        SELECT 1 FROM tblkunde WHERE email = :email LIMIT 1
        Die Spalten, die du ja nicht brauchst, werden so gar nicht zurückgegeben und es wird nach dem ersten Treffer auch nicht weiter gesucht.

        was wäre denn da die alternative?

        Kommentar


        • #5
          Ich verstehe die Frage nicht. Eine Alternative habe ich dir gezeigt.

          Kommentar


          • #6
            korrekt

            ich habe nun in dem Beispiel folgendes übernommen:

            PHP-Code:
             $sql "SELECT 1 FROM tblkunde WHERE email = :email LIMIT 1"
                        
            $q $conn->prepare($sql); 
                        
            $q->bindValue(':email'$_POST['email'], PDO::PARAM_STR); 
                        
            $q->execute(); 
                        
            $anz $q->rowCount(); 
                        if (
            $anz 0) { $fehler['email'] = "(eMail-Adresse schon registriert!)"; } 
            Nun wollte ich noch wissen wie ich allgemein Zeilen zählen kann , also dass dann ich diesen Wert als Ergebnis vor liegen habe. Meine Codebeispiel funktioniert zwar , scheint aber nicht das Optimale zu sein wie du zitiert hast:

            If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.
            Wäre toll wenn du nen Tipp für ne allgemeingültige Zählmöglichkeit hast.

            P.S. Sorry für meinen Beitrag von vorhin, dieser war echt nicht aussagekräftig

            Kommentar


            • #7
              In diesem Code brauchst du gar nichts mehr zu zählen, sondern nur noch zwischen "Ergebnis gefunden" und "kein Ergebnis gefunden" zu unterscheiden:
              PHP-Code:
              if ($q->fetch() !== false) { /* email schon registriert */ 
              Und allgemein stellt man sich die Frage: Brauche ich alle Daten, die ich gerade abgefragt habe? Wenn ja, holst du sie dir sowieso mit fetch oder fetchAll und kannst die Anzahl dann selbst in PHP ermitteln (z.B. mit [man]count[/man]). Wenn nein, ist es vielleicht sinnvoll, den Query zu ändern. Wenn es erstmal nur darauf ankommt, eine Anzahl zu kennen, aber nur einen Teil der Daten oder sogar gar keine braucht, macht man eben erstmal einen SELECT COUNT

              Kommentar

              Lädt...
              X