© Éditions Eyrolles
279
chapitre n° 7
Programmation avancée
Il est bien sûr possible de construire des instructions SQL à partir d’un programme C (MySQL
C API client library), Java (MySQL Connector/J), .Net (MySQL Connector/NET) ou PHP par
une API écrite en C (mysqli extension).
Par exemple, on pourra créer une table dont le nom passera en paramètre et qui aura un
nombre variable de colonnes. Il sera aussi permis de construire automatiquement une requête
SQL en fonction des choix d’un utilisateur. En plus des ordres simples, on pourra également
paramétrer une suite d’instructions dans un bloc MySQL.
Une instruction SQL dynamique est stockée en tant que chaîne de caractères qui sera évaluée
à l’exécution et non à la compilation (en opposition aux instructions SQL statiques qui
peuplent la majorité des sous-programmes).
Seules les instructions suivantes peuvent être construites dynamiquement (dans un prepared
statement) : CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, et la plupart des commandes SHOW.
Les états préparés ne peuvent être utilisés dans un déclencheur (seuls les sous-programmes
peuvent en bénéficier pour l’heure).
L’instruction :
DO expression1 [,expression2] ...;
exécute l’expression (ou les expressions) sans retourner aucun résultat. On peut l’assimiler à
un raccourci de SELECT expression1,... mais sans renvoi de résultat. Elle peut être
utile pour des fonctions à effet de bord (comme la relâche de verrou : RELEASE_LOCK()).
Syntaxe
La construction dynamique d’instructions SQL (prepared statements) est basée sur les trois
directives suivantes :
PREPARE nomEtat FROM étatPréparé;
EXECUTE nomEtat [USING @var1 [, @var2] ...];
{DEALLOCATE | DROP} PREPARE nomEtat;
q
L’instruction PREPARE associe un nom (insensible à la casse) à une instruction dynamique.
q
étatPréparé est soit une chaîne soit une variable de session contenant le texte de
l’instruction SQL construite (instruction simple, pas d’instructions multiples). Dans cette
chaîne, le caractère « ? » (appelé placeholder) permet de se substituer à un paramètre.
q
L’instruction EXECUTE lance l’ordre paramétré avec éventuellement la clause USING qui
reliera les paramètres aux variables de session.
q
Pour en terminer avec un ordre préparé, utilisez DEALLOCATE PREPARE qui supprime le
contenu de l’ordre (une fin de session désalloue tous les ordres ouverts).
279
chapitre n° 7
Programmation avancée
Il est bien sûr possible de construire des instructions SQL à partir d’un programme C (MySQL
C API client library), Java (MySQL Connector/J), .Net (MySQL Connector/NET) ou PHP par
une API écrite en C (mysqli extension).
Par exemple, on pourra créer une table dont le nom passera en paramètre et qui aura un
nombre variable de colonnes. Il sera aussi permis de construire automatiquement une requête
SQL en fonction des choix d’un utilisateur. En plus des ordres simples, on pourra également
paramétrer une suite d’instructions dans un bloc MySQL.
Une instruction SQL dynamique est stockée en tant que chaîne de caractères qui sera évaluée
à l’exécution et non à la compilation (en opposition aux instructions SQL statiques qui
peuplent la majorité des sous-programmes).
Seules les instructions suivantes peuvent être construites dynamiquement (dans un prepared
statement) : CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, et la plupart des commandes SHOW.
Les états préparés ne peuvent être utilisés dans un déclencheur (seuls les sous-programmes
peuvent en bénéficier pour l’heure).
L’instruction :
DO expression1 [,expression2] ...;
exécute l’expression (ou les expressions) sans retourner aucun résultat. On peut l’assimiler à
un raccourci de SELECT expression1,... mais sans renvoi de résultat. Elle peut être
utile pour des fonctions à effet de bord (comme la relâche de verrou : RELEASE_LOCK()).
Syntaxe
La construction dynamique d’instructions SQL (prepared statements) est basée sur les trois
directives suivantes :
PREPARE nomEtat FROM étatPréparé;
EXECUTE nomEtat [USING @var1 [, @var2] ...];
{DEALLOCATE | DROP} PREPARE nomEtat;
q
L’instruction PREPARE associe un nom (insensible à la casse) à une instruction dynamique.
q
étatPréparé est soit une chaîne soit une variable de session contenant le texte de
l’instruction SQL construite (instruction simple, pas d’instructions multiples). Dans cette
chaîne, le caractère « ? » (appelé placeholder) permet de se substituer à un paramètre.
q
L’instruction EXECUTE lance l’ordre paramétré avec éventuellement la clause USING qui
reliera les paramètres aux variables de session.
q
Pour en terminer avec un ordre préparé, utilisez DEALLOCATE PREPARE qui supprime le
contenu de l’ordre (une fin de session désalloue tous les ordres ouverts).
