2010-04-20 3 views
0

J'ai une procédure stockée:mysql procédures stockées en utilisant php

delimiter // 

create procedure userlogin(in eml varchar(50)) 

begin 

    select * from users 

    where email = eml; 

end// 

delimiter ; 

And the php: 

$db = new mysqli("localhost","root","","houseDB"); 

$eml = "[email protected]"; 

$sql = $db->query("CALL userlogin('$eml')"); 

$result = $sql->fetch_array(); 

L'erreur que je reçois du navigateur quand je lance le script php:

Fatal error: Call to a member function fetch_array() on a non-object...

J'utilise la version de phpMyAdmin 3.2. 4 et version du client mysql 5.1.41.

Répondre

0

mysqli::query renvoie false si la requête échoue (au lieu de renvoyer un objet résultat ou true). Vous devez vérifier si le résultat est en fait un objet:

$sql = $db->query("CALL userlogin('$eml')"); 

if (is_object($sql)) 
$result = $sql->fetch_array(); 
else 
printf("Error: %s\n", $sql->error); 

Vous obtiendrez probablement un message d'erreur expliquant pourquoi l'appel de la procédure stockée didn * t entraînez.

+0

$ sql-> erreur échouera également car 'false' n'a pas d'attribut 'error'. En cas de faux, vous pouvez 'echo mysql_error();' pour déboguer l'erreur – maid450

+0

@ maid450 c'est 'mysqli', pas' mysql'. –

+0

droit, désolé, n'a pas réalisé à cela: P – maid450

2

Vous devez utiliser mysqli_multi_query, pas de requête. Vérifiez http://us.php.net/manual/en/mysqli.multi-query.php, ils ont un bon exemple

+0

Pourquoi appeler une procédure stockée besoin de mysqli_multi_query'? Il ne le crée pas, il l'appelle, n'est-ce pas? –

+0

Mais il renvoie des valeurs. Si ce n'était pas le cas, cela fonctionnerait tel quel (en fait, cela fonctionne, mais pour accéder au jeu de résultats à partir de la procédure, nous devons utiliser multi_query). – a1ex07

Questions connexes