8796 sujets

Développement web côté serveur, CMS

Bonjour à tous et à toutes,

Je suis entrain de faire des testes sur des procédures stockées et PDO.

J'ai essayer ça:
Ma procédure stockée:

DROP PROCEDURE IF EXISTS `proc1`;
DELIMITER $$
CREATE PROCEDURE proc1( OUT Result TINYINT(1) )
BEGIN
    SET Result= 999999;
END
$$


Mon code PDO:

/*Variables pour la connexion à la base de données*/
$name_db 	= "nom de ma base";
$pw_db 		= "mot de passe";
$name_user  = "utilisateur";
$host 		= "hôte";

/*Connexion à la base de données*/
$dbh=new PDO('mysql:host='.$host.';dbname='.$name_db, $name_user, $pw_db);

$stmt = $dbh->prepare("CALL proc1()");

// Appel de la procédure stockée
$stmt->execute();
$return_value = $stmt->fetch(PDO::FETCH_ASSOC) ;

var_dump($return_value);

print "La procédure a retourné : ".$return_value['Result']."\n";


Ce code me renvoie toujours false à la variable "$return_value".
Je ne voie pas pourquoi, si vous avez une idée.

Merci d'avance.

Bonne après-midi.
Modifié par etudiante87 (28 Apr 2010 - 08:06)
Salut,

bon j'ai carrément plus l'habitude des procédures stockées SQL SERVEUR que Mysql

mais y a un truc qui me parait trés probable. ta proc stock ne renvoie rien!

donc un fetch_assoc ne peut qu'être vide d'où le false je pense.

tu fais un set oui.
mais le set me semble définie une variable qui à une portée limitée.
elle doit disparaitre aprés ton end je suppose ou au mieux lors de la fin de la session.

faudrait que ta requête produise un select à mon avis pour faire un test correct.

d'ailleurs même avec le select c'est pas certain que ça marche.
en effet dans une PS tu peut faire plusieurs select d'affiler.

un ps c'est plutôt pour faire des manipulations sur la base, inserer, "deleter","updater", créer des bases et des vues. faire des test du type si un select rend un résultat je fais ça sinon je fais ceci.

et puis ensuite tu interroges normalement hors ps.
Modifié par CPascal (27 Apr 2010 - 16:03)
Bonjour,

Merci pour ta réponse.
J'ai modifié mon code, voici ce que j'ai fait:

Procédure stockée:

DROP PROCEDURE IF EXISTS `proc1`;
DELIMITER $$
CREATE PROCEDURE proc1( OUT Result BIGINT) 
BEGIN
    DECLARE o BIGINT UNSIGNED;
    SET o := 99999999;
    SELECT o INTO Result;
END
$$


Code PHP:

/*Variables pour la connexion à la base de données*/
$name_db 	= "nom de ma base de données";
$pw_db 		= "mot de passe";
$name_user  = "utilisateur";
$host 		= "hôte";

/*Connexion à la base de données*/
$dbh=new PDO('mysql:host='.$host.';dbname='.$name_db, $name_user, $pw_db);

echo "req1\n";
$stmt = $dbh->prepare("CALL proc1(@TOTO)");
// Appel de la procédure stockée
$stmt->execute();
$return_value = $stmt->fetch(PDO::FETCH_ASSOC) ;
var_dump($return_value);

echo "req2 \n";
$stmt = $dbh->prepare("SELECT @TOTO");
// Appel de la procédure stockée
$stmt->execute();
$return_value = $stmt->fetch(PDO::FETCH_ASSOC) ;
var_dump($return_value);


print "La procédure a retourné : ".$return_value['@TOTO']."\n";


Ceci fonctionne, faut que je teste d'autre procédures stockées.

Bonne journée à tous et à toutes et encore merci.