Maison > Questions et réponses > le corps du texte
Lorsque j'exécute cette requête, j'obtiens ce message d'erreur "Code d'erreur : 1172. Le résultat contient plusieurs lignes"
CREATE DEFINER=`root`@`localhost` PROCEDURE `un_follow`( user_been_following_id int, user_following_id int ) BEGIN declare id int; select following_id into id from user_following where user_been_following_id = user_been_following_id and user_following_id = user_following_id; delete from user_following where following_id = id; ENDEst-il utile que
id soit la clé primaire du tableau ci-dessous ?
P粉3223196012024-04-05 13:11:10
Votre variable locale porte le même nom que la colonne du tableau. De cette façon, vous ne comparez jamais la variable locale à la colonne, mais toujours à la variable locale elle-même.
Votre requête doit renvoyer exactement une ligne pour fournir la variable id
select following_id into id from user_following where user_been_following_id = user_been_following_id and user_following_id = user_following_id;
user_been_following_id et user_following_id sont interprétés comme des variables locales dans toutes les instances et sont donc traduits comme suit
select following_id into id from user_following where 1 = 1 and 1 = 1;
Toutes les lignes où user_following est renvoyé. Pour résoudre ce problème, renommez vos variables locales comme
CREATE DEFINER=`root`@`localhost` PROCEDURE `un_follow`( local_user_been_following_id int, local_user_following_id int ) BEGIN declare id int; select following_id into id from user_following where user_been_following_id = local_user_been_following_id and user_following_id = local_user_following_id; delete from user_following where following_id = id; END
(en supposant qu'il n'y ait pas de colonne nommée local_user_been_following_id ou local_user_following_id sur la table user_following)
Voir aussi ici : https://dev.mysql.com/doc/ refman/8.0/en/local-variable-scope.html