Maison >base de données >tutoriel mysql >Comment utiliser correctement les variables de liaison dans une clause SQL LIMIT ?
Utiliser correctement les variables de liaison dans la clause SQL LIMIT
Question :
Lorsque vous essayez d'utiliser bindValue
pour définir les valeurs skip
et max
de la clause LIMIT, l'instruction SQL générée n'est pas valide car des guillemets simples sont ajoutés aux variables. Comment résoudre ce problème ?
Réponse :
Pour résoudre ce problème, convertissez la valeur de la variable en entier avant de la transmettre à la fonction bindValue
. Cela garantit qu'aucun guillemet simple n'est ajouté, résolvant ainsi les erreurs de syntaxe SQL.
Voici le code modifié :
<code class="language-php">$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', (int)$_GET['albumid'], PDO::PARAM_INT); // 强制转换为整数 if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', (int)$max, PDO::PARAM_INT); // 强制转换为整数 $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);</code>
La clé est de convertir explicitement les variables $_GET['albumid']
et $max
en un type entier avant bindValue
. Cela évite que PDO les traite comme des chaînes et ajoute des guillemets simples, provoquant des erreurs de syntaxe dans la clause LIMIT. La fonction trim()
est utilisée pour supprimer tous les espaces supplémentaires dans la variable $_GET['skip']
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!