2010-08-18 8 views
2

J'ai quelques questions concernant les procédures stockées. Après des heures de googling, je ne trouve vraiment aucun exemple de requête vraiment simple.Procédures stockées MySQL

CREATE PROCEDURE test1(IN uid INT) 
BEGIN 
    SELECT USER_NAME FROM USERS WHERE USER_ID = uid; 
END // 

cette requête prend en entrée « uid » et sélectionne le nom d'utilisateur pour ce uid, Quelqu'un peut-il s'il vous plaît expliquer comment j'appelle cette procédure en php et aussi, comment puis-sortie I, les lignes réelles du php var?

+0

Avec quelle interface de base de données? mysqli? PDO? Autre chose? –

+0

J'ai inséré la procédure stockée en utilisant phpmyadmin, mais j'essaie d'exécuter via php –

Répondre

0

Vous devriez envisager de le faire avec une fonction stockée qui retourne un seul VARCHAR:

CREATE FUNCTION test1(uid INT) RETURNS VARCHAR(100) 
BEGIN 
    DECLARE V_RETURN_VAL VARCHAR(100); 

    SELECT USER_NAME 
    INTO V_RETURN_VAL 
    FROM USERS 
    WHERE USER_ID = uid; 

    RETURN V_RETURN_VAL; 
END // 
1

Autant que je sache, vous avez juste besoin de mettre appel avant dans la requête:

$result = mysql_query("CALL test1(".$args.")"); 
$username = mysql_result($result); 
+0

Mais n'ai-je pas besoin de définir un 'OUT' var dans la procédure afin d'obtenir les lignes sélectionnées pour le php var? –

0

Vous pouvez simplement utiliser "CALL" et récupérez les lignes comme s'il s'agissait d'une requête normale. Le seul cas où il est différent est que la procédure renvoie plusieurs ensembles de résultats, auquel cas vous devez les parcourir tous (même ceux qui sont vides) avec une méthode qui donne l'ensemble de résultats suivant.

Les paramètres OUT sont une perte de temps car ils nécessitent plus d'allers-retours et l'état côté serveur pour aller chercher leurs résultats; vous écrivez invariablement plus de code et avez plus de bugs si vous les utilisez.

Questions connexes