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
Libérer: 2024-12-06 18:51:13
original
545 Les gens l'ont consulté

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 ?, ?
Copier après la connexion

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();
Copier après la connexion

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);
Copier après la connexion

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

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

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal