2010-01-13 8 views
1

Quelqu'un peut-il me dire ce que je fais mal? Je ne peux pas récupérer les lignes affectées après la suppression d'une ligne. La fonction renvoie toujours int (0) même si l'action de suppression a été effectuée. J'ai lu où je devais effacer ou fermer les résultats que j'ai faits mais cela ne fonctionne toujours pas. Un débogage affiche cette erreur: Commande désynchronisée. Le manuel indique que pour surmonter cela, $ result-> free doit être utilisé. Dans mon cas, ça ne marche pas.mysqli ne retourne pas les lignes affectées

$res = db::query("CALL deleteUser('$phone')"); 

    if($res !== 1) { 
     echo 'failed'; 
    } else { 
     echo 'success'; 
    } 

Ceci est la partie de la fonction où la requête fait son travail.

if(self::$instance->query($query) === false){ 
     throw new exception("Failed"); 
    } return self::$instance->affected_rows; 
+0

pourquoi ne pas simplement sélectionner dans les mêmes conditions et faire un écho avant de supprimer? – CheeseConQueso

Répondre

1

Lorsque vous appelez une procédure stockée ou une fonction du int(0) est que la procédure faisant remarquer stockée est sortie sans aucune erreur. Vous devez sélectionner le nombre de lignes affectées dans la procédure stockée, puis demander à votre procédure stockée de renvoyer les lignes affectées via une variable de sortie.

+0

pygorex1, il y a en fait une erreur qui lui est associée .. Il indique que la commande ne peut pas être exécutée à ce moment; commandes non synchronisées. De plus, je comprends qu'une procédure ne peut pas afficher une valeur booléenne. Est-ce vrai? – Bebo

0

Lors de l'exécution procédures stockées MySQL en PHP, il y a des occasions où il y a données supplémentaires envoyées à partir du serveur que vous avez encore pour récupérer. Cela provoquera l'erreur "Commandes non synchronisées". Je ne me souviens pas exactement pourquoi, mais j'ai lu cela sur les forums MySQL il y a longtemps. Vous pouvez nettoyer vos données de résultat avec quelque chose comme ceci:

while (self::$instance->next_result()) { } 
+0

Merci. Je n'ai jamais compris exactement où le mettre. Cela devrait aller au-dessus du retour, correct? – Bebo

Questions connexes