Maison > base de données > tutoriel mysql > Comment puis-je exécuter des requêtes dynamiques dans MySQL à l'aide de PREPARE et EXECUTE ?

Comment puis-je exécuter des requêtes dynamiques dans MySQL à l'aide de PREPARE et EXECUTE ?

Susan Sarandon
Libérer: 2024-12-14 10:15:18
original
770 Les gens l'ont consulté

How Can I Execute Dynamic Queries in MySQL Using PREPARE and EXECUTE?

Exécution dynamique de requêtes dans MySQL

L'exécution de chaînes sous forme de requêtes dynamiques peut être une technique utile dans la programmation de bases de données. Dans MySQL, cette fonctionnalité n'est pas disponible via des méthodes directes comme EXEC ou EXECUTE. Cependant, il existe une solution de contournement en utilisant les instructions PREPARE et EXECUTE.

Pour exécuter une chaîne en tant que requête dans MySQL, vous pouvez utiliser les étapes suivantes :

  1. Préparez le Requête : Utilisez l'instruction PREPARE pour définir un modèle de requête. Le modèle peut contenir des espaces réservés pour les valeurs dynamiques. Par exemple :
PREPARE stmt FROM 'INSERT INTO table_name (column1, column2) VALUES (?, ?)';
Copier après la connexion
  1. Définir les valeurs des paramètres : Avant d'exécuter la requête préparée, vous devez définir les valeurs des espaces réservés. Cela peut être fait à l'aide de l'instruction SET :
SET @value1 = 'value1';
SET @value2 = 'value2';
Copier après la connexion
  1. Exécuter la requête : Une fois les espaces réservés définis, vous pouvez exécuter la requête préparée à l'aide de EXECUTE déclaration :
EXECUTE stmt USING @value1, @value2;
Copier après la connexion
  1. Désaffecter les éléments préparés Instruction : Après avoir exécuté la requête préparée, vous devez la libérer à l'aide de l'instruction DEALLOCATE PREPARE. Cela libère les ressources associées à la requête préparée :
DEALLOCATE PREPARE stmt;
Copier après la connexion

Exemple :

L'exemple suivant montre comment exécuter dynamiquement une requête pour insérer plusieurs lignes dans une table :

SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
    SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM ( 
           SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9 
    ) as qwe 
) as www
);

PREPARE stmt FROM @queryString;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; 
SET @asd = NULL;
Copier après la connexion

Cet exemple interroge la base de données pour une liste d'ID utilisateur et d'ID de groupe, crée une requête dynamique chaîne pour insérer ces valeurs dans la table user_group, puis exécute la requête dynamique.

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