Procédure stockées et variables de sorties

Petit nouveau ! | 5 Messages

25 oct. 2007, 19:30

Bonjour,

Je m'interresse depuis peu aux proc stockées de mysql, et leur utilisation avec php.

Je n'ai pas trouvé énormément de doc, et le peu ne répondent pas à mes questions, qui je le pensent sont trop simples pour justifier un tutorial complet :x .. ceci dit, pourriez vous m'aider en me donnant les bases, ou une url ou sont expliquées les bases de la manipulations des procedures stockées par php.

Voici ce que j'essaie de faire :
Ma procedure stockée :

Code : Tout sélectionner

CREATE DEFINER=`XXX`@`localhost` PROCEDURE `test7`(OUT V_count int) BEGIN SELECT COUNT(*) INTO V_count FROM epc_client; END
Quand j'execure la requete par :

Code : Tout sélectionner

$this->_sql = "call test7()"; mysql_query( $this->_sql, $this->_resource );

(ou _sql est ma requete : et _ressource ma connexion),

j'obtiens un message d'erreur :

Incorrect number of arguments for PROCEDURE epc.test7; expected 1, got 0 SQL=CALL test7()

Ce qui me parait à peu pres normal, mais je ne sais pas comment spécifier mon parametre de sortie ...

Si une ame charitable peut m'aider :)

Merci bcp

Eléphant du PHP | 443 Messages

25 oct. 2007, 19:42

Salut,

Regarde, dans la doc mysql, le code à la fin de cette page


Tracker.

Petit nouveau ! | 5 Messages

25 oct. 2007, 20:02

Salut Tracker !

Je te remercie :) ça marche nickel !

dieu te le rendra au centuple ... !

A+

Eléphant du PHP | 443 Messages

25 oct. 2007, 20:09

Salut Tracker !
Je te remercie :) ça marche nickel !
dieu te le rendra au centuple ... !
A+
De rien m'sieur, mais pour le centuple je crois que je peux toujours attendre :wink:

[ps] il me semble que tu es inscrit, alors appuie sur [résolu]..

++

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 oct. 2007, 20:17

Pour qu'on ait une version correcte sur le forum n'hésite pas à nous en dire plus :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 443 Messages

25 oct. 2007, 21:40

Je peux compléter par un exemple si tu veux, le principe étant d'échanger les valeurs en utilisant des "variables mysql":

exemple de procédure

Code : Tout sélectionner

delimiter | create procedure sp_test (inout var1 int) begin set var1 = var1 + 1; end |
exemple de script
<?php
$cnx = mysql_connect('localhost','root','');
mysql_select_db('test', $cnx);

// 1- Initialisation de la variable @x
mysql_query('set @x=1', $cnx);

// 2- Invocation de la procédure
mysql_query('call sp_test(@x)', $cnx);

// 3- Récupèration du résultat
$res = mysql_query('select @x', $cnx);

if($row = mysql_fetch_row($res))
{
	mysql_free_result($res);
	echo 'sp_test result:'.$row[0];
}
?>

Tracker.

Petit nouveau ! | 5 Messages

25 oct. 2007, 22:16

Je crois que Tracker à tres bien illustré la manip.

Pour corriger mon premier exemple, il aurait fallu écrire :
$this->_sql = "call test7(@mavar)";
mysql_query( $this->_sql, $this->_resource );

$this->_sql = "select @mavar";
$cur = mysql_query( $this->_sql, $this->_resource );

$row = mysql_fetch_row( $cur );

echo $row[0]; //affiche le resultat de la requete

mysql_free_result( $cur );
Les deux commandes mysql_query() pouvant être remplacées par une seule de mysqli_multi_query()


A+