Transmission des paramètres de tableau et utilisation de la clause LIMIT avec PDO
Lorsque vous travaillez avec des requêtes de base de données, il peut être avantageux de transmettre un tableau de paramètres à une instruction PDO tout en utilisant la clause LIMIT. Cependant, cela peut être difficile lors de l'utilisation de la méthode bindParam pour définir des paramètres individuels.
Le dilemme
Le défi se pose car la clause LIMIT nécessite que des valeurs numériques spécifiques soient liées. , tandis que la méthode d'exécution attend un tableau de paramètres nommés. Cette incompatibilité empêche les deux approches d'être utilisées simultanément.
Surmonter le problème
La solution réside dans la désactivation du paramètre par défaut de PDO::ATTR_EMULATE_PREPARES. Lorsqu'il est activé, PDO génère en interne du SQL dynamique et cite des valeurs, émulant essentiellement les instructions préparées. Cependant, ce comportement par défaut interfère avec la transmission des paramètres nommés.
Désactivation des préparations émulées
En définissant PDO::ATTR_EMULATE_PREPARES sur false à l'aide de la méthode setAttribute, le comportement par défaut est désactivé. . Cela permet à PDO d'utiliser des instructions préparées réelles, permettant la liaison de paramètres nommés tout en utilisant la clause LIMIT.
Exemple d'utilisation
<code class="php">$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!</code>
Considérations sur les performances
Les préparations émulées sont utilisées par défaut pour MySQL afin d'améliorer les performances. La désactivation des préparations émulées peut réduire légèrement les performances, mais elle permet une plus grande flexibilité dans la liaison des paramètres.
Ressources supplémentaires
Pour plus d'informations sur ce sujet, reportez-vous aux ressources suivantes :
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!