PDO und count, Ergebnis immer plus 1

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

  • PDO und count, Ergebnis immer plus 1

    PHP-Code:
        $sql 'SELECT username FROM users WHERE username = :username';
        
    $stmt $dbh->prepare($sql);
        
    $stmt->bindParam(':username'$usernamePDO::PARAM_STR40);
        
    $stmt->execute();
        
    $row $stmt->fetch();
        echo 
    $count count($row); 
    Wenn $Username leer ist, oder einen Wert besitzt den es nicht in der Datanbank gibt, dann ergibt echo $count = count($row) trotzdem 1. Falls $Username einen Wert hat, welcher existiert, dann bekomme ich 2.

    Hab ich ein Fehler in der Abfrage oder ist das bei PDO üblich das dass Ergebniss einfach plus 1 ist?

    Das selbe übrigens mit dieser Abfrage:

    PHP-Code:
        $sql='SELECT username FROM users WHERE username = "'.$username.'"';
        
    $row=$dbh->query($sql)->fetch();
        
    $count count($row); 

  • #2
    Hmm ich kenn mich zwar nicht mit PDO aus, aber wenn das Ergebniss immer +1 ist, warum dann nicht dekrementieren?

    Kommentar


    • #3
      from Manual:

      PDOStatement->fetch()

      Fetches a row from a result set associated with a PDOStatement object.
      Wie kommst du darauf, dass du die Anzahl der Datensätze via count() bekommst?

      Kommentar


      • #4
        Hab ich bis jetzt auch gemacht, also immer -1. Jedoch könnte es ja sein dass ich einen Fehler habe,so dass wenn ich die Struktur der Abfrage irgendwie ändere, es plötzlich nicht mehr plus 1 ist.

        Als ich mal ein bisschen rumgespielt habe, hätte ich schwören können, dass ich mal ein Ergebniss von 0 bekommen habe. Jedoch weiss ich nicht mehr was ich da gemacht habe, oder hab ich falsch hingeschaut habe.

        Edit:

        @asp2php
        Laut Comments auf http://de.php.net/manual/de/function...t-rowCount.php

        PHP-Code:
        <?php

        $rows 
        $statement->fetchAll();
        $count count($rows);

        ?>
        Zuletzt geändert von Londrag; 06.04.2008, 19:56.

        Kommentar


        • #5
          Original geschrieben von Londrag

          @asp2php
          Laut Comments und Examples auf http://de.php.net/manual/de/function...t-rowCount.php
          Es steht da aber auch:

          For most databases, PDOStatement->rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO->query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement->fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.

          Kommentar


          • #6
            Arrr...mit fetchAll anstatt fetch scheint es zu funktionieren.

            PHP-Code:
            $sql 'SELECT username FROM users WHERE username = :username';
                
            $stmt $dbh->prepare($sql);
                
            $stmt->bindParam(':username'$usernamePDO::PARAM_STR40);
                
            $stmt->execute();
                
            $row $stmt->fetchAll();
                echo 
            $count count($row); 
            Ergibt bei gültigem Username 1 und bei ungültigem Username 0



            Danke für die Antworten asp2php.
            Es steht aber auch
            For most databases, PDOStatement->rowCount() does not return the number of rows affected by a SELECT statement.
            rowCount() funktioniert bei mir auf einem Server ab MySQL 5. Da dies aber bei SQL Lite und anderen nicht funktioniert, verwende ich rowCount erst gar nicht.
            Zuletzt geändert von Londrag; 06.04.2008, 20:02.

            Kommentar


            • #7
              das ist aber übertrieben, wenn du nur die Anzahl der Treffer ermitteln möchtest, stattdessen bist du mit select count(username) ... besser bedient, es ist einfach resource-schonender.

              Kommentar


              • #8
                Stimmt, jedoch verwende ich count() nur wenn ich weiss dass der rückgabe Wert entweder 1 oder 0 ist, und nicht 1000 oder mehr.
                Nachteil an Count(*) ist halt dass eine zuätzliche Abfrage her muss.

                Kommentar

                Lädt...
                X