Maison >base de données >tutoriel mysql >Comment utiliser correctement les variables de liaison dans une clause SQL LIMIT ?

Comment utiliser correctement les variables de liaison dans une clause SQL LIMIT ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-24 00:21:08710parcourir

How to Correctly Use Bind Variables in a SQL LIMIT Clause?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn