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
Susan Sarandonoriginal
2024-12-14 10:15:18773parcourir

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 (?, ?)';
  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';
  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;
  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;

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;

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!

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