Maison > base de données > tutoriel mysql > le corps du texte

Comment transmettre un tableau de paramètres PDO avec une clause LIMIT ?

Barbara Streisand
Libérer: 2024-10-24 01:29:29
original
321 Les gens l'ont consulté

How to Pass an Array of PDO Parameters with a LIMIT Clause?

Passer un tableau de paramètres PDO avec la clause LIMIT

Dans PDO, exécuter une requête avec une clause LIMIT à l'aide d'un tableau de paramètres peut être un défi.

Problème

Considérez le code suivant :

$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%')
LIMIT :limit1, :limit2";

$stmt = $pdo->prepare($sql);
$stmt->execute($array); // Doesn't work
Copier après la connexion

Bien qu'il soit souhaitable d'utiliser l'entrée tableau pour plus de commodité, les paramètres :limit1 et :limit2 ne fonctionneront que s'ils sont liés individuellement :

$stmt->bindParam(':limit1', $limit1, PDO::PARAM_INT);
$stmt->bindParam(':limit2', $limit2, PDO::PARAM_INT);
$stmt->execute(); // Still doesn't work
Copier après la connexion

Solution

Le problème réside dans le paramètre par défaut de PDO de PDO::ATTR_EMULATE_PREPARES sur true. Ce paramètre amène PHP à émuler les instructions préparées au lieu d'utiliser les instructions préparées MySQL natives, ce qui empêche la liaison correcte des paramètres LIMIT.

Pour résoudre ce problème, désactivez l'émulation en définissant l'attribut sur false :

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Copier après la connexion

Une fois l'émulation désactivée, l'entrée du tableau peut être utilisée pour exécuter la requête correctement :

$stmt = $pdo->prepare($sql);
$stmt->execute($array); // Works!
Copier après la connexion

Considérations sur les performances

Notez que la désactivation de l'émulation peut avoir un impact sur les performances, en tant que natif les instructions préparées sont plus efficaces dans certains scénarios. Cependant, pour les requêtes qui nécessitent des clauses LIMIT dynamiques, c'est la solution la plus fiable.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!