Maison  >  Article  >  base de données  >  Comment transmettre les paramètres du tableau et utiliser la clause LIMIT avec PDO

Comment transmettre les paramètres du tableau et utiliser la clause LIMIT avec PDO

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 19:37:01931parcourir

How to Pass Array Parameters and Use LIMIT Clause with PDO

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 :

  • [PDO MySQL : Utiliser PDO::ATTR_EMULATE_PREPARES ou pas ?](https://stackoverflow.com/questions/3273325/pdo-mysql-use-pdo-attr-emulate-prepares-or -non)

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