Ankündigung

Einklappen
Keine Ankündigung bisher.

PDO statement - SELECT - WHERE - LIMIT - Problem

Einklappen

Neue Werbung 2019

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

  • PDO statement - SELECT - WHERE - LIMIT - Problem

    Hallo Freunde,

    entweder ich sehe den Wald vor lauter... mal wieder nicht,- oder ich habe einfach einen Synthax-Fehler drin...

    Mache eine Datenabfrage die so aussieht und auch funktioniert:
    PHP-Code:
    $statement $pdo->prepare("SELECT * FROM qi_kunden ORDER BY id DESC LIMIT :start, :limit");
    $statement->bindParam(':kdnr'$kdnrPDO::PARAM_INT);
    $statement->bindParam(':start'$startPDO::PARAM_INT);
    $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT);
    $statement->execute();
    ... 
    Sowie ich aber eine Selektion mit WHERE einfüge,- funktioniert das nicht mehr:
    PHP-Code:
    $statement $pdo->prepare("SELECT * FROM qi_kunden WHERE kdnr = :kdnr ORDER BY id DESC LIMIT :start, :limit");
    $statement->bindParam(':kdnr'$kdnrPDO::PARAM_INT);
    $statement->bindParam(':start'$startPDO::PARAM_INT);
    $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT);
    $statement->execute();
    ... 
    Ich kann aber keinen Fehler erkennen?
    Wer hilft mir auf die Sprünge?

    Danke!

  • #2
    Was sagt bspw. var_dump() über $kdnr?
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      var_dump($kdnr) gibt aus:
      PHP-Code:
      int(4444
      Und diese 'kdnr' soll auch abgefragt werden...!?

      Kommentar


      • #4
        Was erhältst Du, wenn Du LIMIT weglässt?
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Dabei ändert sich nichts, es wird auch nichts ausgegeben.
          Das hatte ich auch schon alles versucht. Das LIMIT funktioniert ja auch, und wenn ich WHERE weglasse wird der gesamte Tabelleninhalt ausgegeben.
          Ich kann nur nicht eingrenzen / selektieren.

          Kommentar


          • #6
            OKAY,- Gelöst!
            Ich hatte etwas übersehen:
            Die Statements für die Variablen stehen in dieser Reihenfolge:
            PHP-Code:
            $statement->bindParam(':kdnr'$kdnrPDO::PARAM_INT);
            $statement->bindParam(':start'$startPDO::PARAM_INT);
            $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT); 
            Die Definitionen der Variablen für diese Statements müssen in derselben Reihenfolge stehen, also:
            PHP-Code:
            $kdnr 4444;
            $start = ($seite-1)*$beitraege_pro_seite;
            $beitraege_pro_seite 20
            Anscheinend läuft das "Array-mäßig" ab,- muss man erstmal wissen...
            Wieder was dazu gelernt!

            Danke für die Mühen,
            Thomas

            Kommentar


            • #7
              Das Problem muss ein anderes gewesen sein, denn die Reihenfolge hat damit nichts zu tun. Wichtig ist nur, dass die Variablen vor dem Statement schon definiert und belegt sind!
              Ob Du jetzt aber $kdnr als erstes oder als letztes von den dreien definierst, ist völlig egal.
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Hm,- dieser Meinung bin ich ja eigentlich auch, aber Tatsache ist dass dies funktioniert:
                PHP-Code:
                $kdnr 4444;
                $start = ($seite-1)*$beitraege_pro_seite;
                $beitraege_pro_seite 20;

                //Abfrage der Datenbank und Ausgabe der Daten
                $statement $pdo->prepare("SELECT * FROM qi_kunden WHERE kdnr = :kdnr ORDER BY id ASC LIMIT :start, :limit");
                $statement->bindParam(':kdnr'$kdnrPDO::PARAM_INT);
                $statement->bindParam(':start'$startPDO::PARAM_INT);
                $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT); 
                ...dies aber nicht funktioniert:
                PHP-Code:
                $start = ($seite-1)*$beitraege_pro_seite;
                $beitraege_pro_seite 20;
                $kdnr 4444;

                //Abfrage der Datenbank und Ausgabe der Daten
                $statement $pdo->prepare("SELECT * FROM qi_kunden WHERE kdnr = :kdnr ORDER BY id ASC LIMIT :start, :limit");
                $statement->bindParam(':kdnr'$kdnrPDO::PARAM_INT);
                $statement->bindParam(':start'$startPDO::PARAM_INT);
                $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT); 
                Deshalb sprach ich eingangs ja von "dem Wald den ich vor lauter... nicht sehe"...

                Kommentar


                • #9
                  Naja, aber das liegt daran, dass Du bei $start bereits $beitraege_pro_seite verwendest, es aber erst danach deklarierst!
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Stimmt,- jetzt sehe ich den Wald wieder...

                    Kommentar


                    • #11
                      Wenn du ins Error Log geschaut hättest, oder dein error_reporting zum Entwickeln hochgedreht hättest (was man sollte) dann hätte PHP dir auch gleich eine Notice geschenkt und du hättest es sofort gesehen und erledigen können.
                      PHP-Code:
                      error_reporting(-1);
                      ini_set('display_errors'1);

                      $seite 1;
                      $start = ($seite 1) * $beitraege_pro_seite;
                      $beitraege_pro_seite 20;

                      // Notice:  Undefined variable: beitraege_pro_seite in ... on line 5 
                      MOD: Verschoben von Datenbanken
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von Arne Drews Beitrag anzeigen
                        Wichtig ist nur, dass die Variablen vor dem Statement schon definiert und belegt sind!
                        Ist bei bindParam() egal. Bei bindValue() wäre das so.

                        Kommentar


                        • #13
                          Zitat von Dormilich Beitrag anzeigen

                          Ist bei bindParam() egal. Bei bindValue() wäre das so.
                          Falls es den TE kayleigh interessiert.. Hier ist ein schönes kurzes Beispiel zum Unterschied der beiden: https://stackoverflow.com/questions/...13428#14413428
                          The string "()()" is not palindrom but the String "())(" is.

                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Das Beipspiel von hausl zeigt auch eine Tücke von bindParam(). Bekommt die Variable womöglich irgendwo zwischen bindValue und execute einen anderen Wert zugewiesen, so wird der zuletzt gesetzte Wert letztlich benutzt.
                            Erfahrene Programmierer nutzen dies um etwas mehr Performance herauszukitzeln. Die Fehlersuche ist für ein Einsteiger bei Problemen für einen solchen Fall ist nicht ganz einfach. Ein weiterer Nachteil von bindParam() ist das nur echte Variablen benutzt werden können.
                            Einsteiger sollten daher besser bindValue() nutzen.

                            Kommentar


                            • #15
                              Zitat von Dormilich Beitrag anzeigen
                              Ist bei bindParam() egal. Bei bindValue() wäre das so.
                              Stimmt! Konnte mich nie daran gewöhnen, Variablen bzw. deren Werte zu verwenden, bevor ich sie auf den eigentlichen Wert ändere. Daher habe ich das wohl verdrängt...

                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X