Formation PUB200 : MySQL, 2018 Les curseurs

18.2 Déclaration et utilisation d'un curseur


Un curseur doit être déclaré dans la procédure stockée au même titre qu'une autre variable locale. Si vous le désirez, vous pouvez faire débuter le nom du curseur par c_. Le curseur sera toujours initialisé dès sa déclaration.

Voici un exemple d'utilisation d'un curseur avec, en parallèle, les lignes de code PHP qui feraient un travail semblable. Nous utilisons ici une requête préparée mais la comparaison serait très semblable avec une requête régulière.

La déclaration d’un curseur correspond en PHP à l’initialisation d’une chaîne de caractères contenant la requête.

Ex. avec PHP :

PHP

$requete = "SELECT id, prenom, nomfamille FROM mecaniciens WHERE ville = ?";

Ex. avec une procédure stockée :

MySQL

DECLARE c_mecaniciens CURSOR FOR SELECT id, prenom, nomfamille FROM mecaniciens WHERE ville = p_ville;

Attention : les curseurs devront être déclarés APRÈS les autres variables mais AVANT les gestionnaires.

La requête SQL sera exécutée lors de l’ouverture du curseur. L’ouverture du curseur correspond en PHP à l’appel de la fonction execute() pour une requête préparée (ou query() pour une requête régulière).

Ex. avec PHP :

PHP

$stmt->execute($requete);

Ex. avec une procédure stockée :

MySQL

OPEN c_mecaniciens;

Alors que la fonction fetch() pour une requête préparée (ou les fonctions fetch_row() et fetch_assoc() pour une requête régulière) permet à un programme PHP de retirer une ligne du tableau de résultat pour travailler avec ses données, les procédures stockées utiliseront la commande FETCH.

Ex. avec PHP :

PHP

$stmt->fetch();

...

$stmt->bind_result($id, $prenom, $nomfamille); 

if ($id == 3) {

    ...

}

Ex. avec une procédure stockée :

MySQL

DECLARE l_id INT;

DECLARE l_prenom VARCHAR(45);

DECLARE l_nomfamille VARCHAR(45);

...

FETCH c_mecaniciens INTO l_id, l_prenom, l_nomfamille;

...

IF l_id = 3 THEN

   ...

END IF;

Une fois le travail terminé, on doit libérer la mémoire.

Ex. avec PHP :

PHP

$stmt->close();

Ex. avec une procédure stockée :

MySQL

CLOSE c_mecaniciens;

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre