Frage

<?php
try
{
    $db = new PDO("mysql:host=localhost;dbname=DBNAME", "USER", "PASSWD");

    $stmt = $db->prepare("SELECT id, name FROM testdb ORDER BY time DESC LIMIT :index, 10");
    $stmt->bindValue(":index", $_GET['index'], PDO::PARAM_INT);
    $stmt->execute();

    while( $r = $stmt->fetch(PDO::FETCH_ASSOC) )
    {
        echo var_dump($r);                                      
    }

}
catch( PDOException $e )
{
    die("Exception");
}

Das Problem ist auf dieser Linie: $stmt->bindValue(":index", $_GET['index'], PDO::PARAM_INT);

Und die spezifischen Parameter ist die zweite.

Der Code, wie er oben ist nicht funktioniert, es gibt nichts zurück, so dass die while-Schleife nicht ausgeführt wird. Wenn ich $ _GET [ ‚index‘] mit einer Reihe ersetzen, wie 10, es funktioniert ganz gut, es 10 Zeilen zurückgibt. Hallte $ _GET [ ‚index‘] zeigt eine Zahl, so sollte es eine Zahl übergeben. Ich habe auch bindParam versucht, aber das Ergebnis ist das gleiche.

Warum ist das nicht funktioniert?

EDIT:

Interessante ... Wenn ich $_GET['index'] with (int)$_GET['index'] ersetzen es funktioniert.

War es hilfreich?

Lösung

Wenn Sie die Option $ stmt-> errorinfo () Sie tatsächlich feststellen, dass Ihre Abfrage ist fehlgeschlagen.

PDO :: PARAM_INT sagt PDO, dass Sie es für eine ganze Zahl geben. Wenn Sie nicht geben PDO eine ganze Zahl, PDO wird der Wert in der SQL-Zeichenfolge angeben.

SELECT id, name FROM testdb ORDER BY time DESC LIMIT "1", 10

Alle Werte in $ _GET sind entweder ein Array oder ein String. Sie haben die richtige Sache von $ _GET Nötigung [ ‚index‘] auf eine ganze Zahl, bevor sie als Wert verbindlich. Auf diese Weise wird PDO eine ganze Zahl, wurde eine ganze Zahl von PDO :: PARAM_INT erwarten, und daher wird der Wert in der SQL-Zeichenfolge nicht zitieren.

SELECT id, name FROM testdb ORDER BY time DESC LIMIT 1, 10

Andere Tipps

Werte in den $_GET super-globalen Array sind Strings: PHP erraten nicht, was iin den Abfragezeichenfolgeflag übergeben wird

.


Wenn Sie einen Wert von $_GET wollen als eine ganze Zahl in Betracht gezogen werden - das ist, was Sie wollen, hier -. Sie werden es auf eine ganze Zahl selbst konvertieren

Um das zu tun, können Sie:

  • typecast : (int)$_GET['yourval']
  • Die intval() -Funktion, die die Basis einer spezifischen ermöglicht, dass die verwendet werden

Sounds wie $ _GET [ 'index'] ist nicht das, was Sie erwarten, dass es sein. Verwenden Sie var_dump () näher der Wert zu überprüfen. Achten Sie auf die Länge der Zeichenfolge, die var_dump Berichte, da einige Zeichen sind visuell nicht sichtbar, aber die Länge der Saite wird die verborgene Geschichte erzählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top