Instructions préparées pour les listes de variables de taille variable dans MySQL avec PHP
De nombreuses opérations de base de données nécessitent la possibilité d'interroger avec un nombre variable d'arguments . Par exemple, dans une base de données de personnes, une requête peut sélectionner des enregistrements dont l'ID figure dans une certaine liste. Cependant, le nombre d'identifiants dans la liste peut varier.
Il existe plusieurs solutions possibles à ce problème.
Solution 1 : valeurs factices
Une approche consiste à créer une instruction qui accepte un nombre fixe de variables et à remplir les variables restantes avec des valeurs factices dont il est garanti qu'elles ne figureront pas dans le tableau. Cependant, cette stratégie peut s'avérer inefficace pour les listes contenant un grand nombre de valeurs factices.
Solution 2 : créer des requêtes dynamiques
Une autre option consiste à éviter d'utiliser des instructions préparées et à la place, construisez dynamiquement la chaîne de requête, en vérifiant soigneusement les éventuelles attaques par injection. Cette approche nécessite une vigilance pour garantir que la requête résultante est sécurisée et exempte d'exploits.
Solutions efficaces
Pour une gestion plus efficace des listes de variables de taille variable :
Solution avec table temporaire :
Créez une table temporaire dans laquelle insérer chaque ID, puis effectuez une jointure contre lui dans la requête.
Solution avec préparation d'instruction dynamique :
Utilisez la fonction sprintf pour créer dynamiquement une instruction préparée avec le nombre approprié d'espaces réservés, puis exécutez-le avec les paramètres fournis :
$dbh=new PDO($dbConnect, $dbUser, $dbPass); $parms=array(12, 45, 65, 33); $st=$dbh->prepare(sprintf( 'SELECT age, name FROM people WHERE id IN (%s)', implode(',',array_fill(0,count($parms),'?')) )); $st->execute($parms);
Cette technique offre l'efficacité des instructions préparées tout en acceptant un nombre variable d'arguments. Le choix entre les solutions de table temporaire et de préparation d'instructions dynamiques dépend de la taille de la liste, cette dernière étant plus adaptée aux listes plus petites.
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!