Maison >base de données >tutoriel mysql >Comment le mot clé LIMIT de MySQL fonctionne-t-il avec les instructions préparées et la liaison de paramètres ?

Comment le mot clé LIMIT de MySQL fonctionne-t-il avec les instructions préparées et la liaison de paramètres ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 18:51:13548parcourir

How Does MySQL's LIMIT Keyword Work with Prepared Statements and Parameter Binding?

Comment fonctionne le mot-clé LIMIT avec les instructions préparées dans MySQL

Le mot-clé LIMIT dans MySQL est utilisé pour restreindre le nombre de lignes renvoyées par un SELECT déclaration. Il prend deux arguments entiers : un décalage et une limite.

Dans l'exemple suivant, la clause LIMIT est utilisée pour sélectionner les 10 premières lignes de la table de commentaires, classées par colonne de date par ordre décroissant :

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?

Pour exécuter cette requête à l'aide d'une instruction préparée par PDO, vous devez lier les trois paramètres de requête aux données appropriées. types :

$query = $db->prepare($sql);
$query->bindParam(1, $post, PDO::PARAM_STR);
$query->bindParam(2, $min, PDO::PARAM_INT);
$query->bindParam(3, $max, PDO::PARAM_INT);
$query->execute();

Cependant, si vous essayez d'exécuter cette requête avec les préparations émulées activées (le paramètre par défaut du pilote MySQL PDO), vous rencontrerez une erreur. En effet, le pilote MySQL convertira automatiquement les deuxième et troisième paramètres de requête en chaînes, ce qui entraînera l'échec de la clause LIMIT.

Pour résoudre ce problème, vous pouvez soit désactiver les préparations émulées, soit utiliser des espaces réservés positionnels au lieu de espaces réservés nommés dans votre requête.

Désactivation de l'émulation Prépare :

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Utilisation d'espaces réservés de position :

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ? OFFSET ?
$query = $db->prepare($sql);
$query->execute([$post, $min, $max]);

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