2009-04-09 7 views
3

J'ai la procédure stockée ci-dessous pour vérifier le nom d'utilisateur disponibilitéMySQL procédure stockée: ne peut pas exécuter à partir du code PHP

DELIMITER $$; 

DROP PROCEDURE IF EXISTS tv_check_email$$ 

CREATE PROCEDURE tv_check_email (IN username varchar(50)) 
BEGIN 
    select USER_ID from tv_user_master where EMAIL=username; 
END$$ 

DELIMITER ;$$ 

Quand je lance ce billet depuis mon outil frontal MySQL, il est fonctionne très bien:

call tv_check_email('[email protected]') 

Mais lorsque vous essayez d'exécuter à partir de la page PHP, je reçois une erreur comme

"PROCEDURE mydatabase.tv_check_email can't return a result set in the given context" 

Je suis su re que ma version de PHP est 5.2.6.

Répondre

3

Cody n'est pas 100%. Vous pouvez lier les colonnes de retour qui en résultent et renvoyer des données sélectionnées dans une procédure stockée.

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

$stmt = $mysqli->prepare("call tv_check_email(?)"); 
$stmt->bind_param('s', "[email protected]"); 
$stmt->execute(); 

$stmt->bind_result($userid); 

while ($stmt->fetch()) { 
    printf("User ID: %d\n", $userid); 
} 

$stmt->close(); 
$mysqli->close(); 
+1

Ah oui, beaucoup mieux. De ma compréhension, le std. L'extension mysql ne prend pas en charge l'accès aux jeux de résultats sans OUT, mais le mysqli le fait (comme votre code l'indique)? Bon à savoir. –

3

Vous devez lier votre résultat dans un paramètre OUT.

Voir les mysql docs sur stored procedures

mysql> delimiter // 

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) 
    -> BEGIN 
    -> SELECT COUNT(*) INTO param1 FROM t; 
    -> END; 
    -> // 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ; 

mysql> CALL simpleproc(@a); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @a; 
+------+ 
| @a | 
+------+ 
| 3 | 

+ ------ +

+0

merci cody, ça a marché – Shyju

Questions connexes