Question

<?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");
}

Le problème est sur cette ligne: $stmt->bindValue(":index", $_GET['index'], PDO::PARAM_INT);

Et le paramètre spécifique est le second.

Le code tel qu'il précède ne fonctionne pas, il ne retourne rien si la boucle while n'est pas exécutée. Si je remplace $ _GET [ « index »] avec un certain nombre, comme 10, il fonctionne très bien, il retourne 10 lignes. Faisant écho $ _GET [ « index »] affiche un numéro, il devrait donc passer un certain nombre. J'ai aussi essayé bindParam, mais le résultat est le même.

Pourquoi est-ce pas de travail?

EDIT:

Intéressant ... Si je remplace $_GET['index'] with (int)$_GET['index'] cela fonctionne.

Était-ce utile?

La solution

Si vous cochez $ stmt-> errorInfo () vous fait constater que votre requête a échoué.

PDO :: PARAM_INT indique PDO que vous lui donnez un entier. Si vous ne donnez pas un entier AOP, PDO la valeur de citer la chaîne SQL.

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

Toutes les valeurs de $ _GET sont soit un tableau ou une chaîne. Vous avez fait la bonne chose $ en forçant _GET [ « index »] à un nombre entier avant de se lier comme une valeur. En faisant cela, AOP obtient un entier, attendait un entier de PDO :: PARAM_INT, et donc ne citerons pas la valeur dans la chaîne SQL.

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

Autres conseils

Les valeurs dans le tableau super-global $_GET sont des chaînes: PHP ne devine pas ce passé IIN le querystring

.


Si vous voulez une valeur de $_GET être considéré comme un entier - qui est ce que vous voulez, ici -. Vous aurez besoin de le convertir en un entier vous

Pour ce faire, vous pouvez utiliser:

  • typecast : (int)$_GET['yourval']
  • intval() fonction, ce qui permet un à la base spécifique que de à utiliser

Sons comme $ _GET [ « indice »] est pas ce que vous attendez qu'il soit. Utilisez var_dump () pour inspecter la valeur plus proche. Faites attention à la longueur de la chaîne que les rapports de var_dump, parce que certains personnages ne sont pas détectables visuellement, mais la longueur de la chaîne racontera l'histoire cachée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top