Ciao,
codice:
THEN DELETE FROM moderators WHERE iduser=IdUser;
pessima idea quella di chiamare il parametro locale della procedura come il nome del campo!!!
mysql non è case sensitive a priori ma dipende dal sistema operativo che c'è sotto...
...quindi molto probabilmente quando scrivi
codice:
THEN DELETE FROM moderators WHERE iduser=IdUser;
in realtà stai scrivendo qualcosa del tipo
codice:
THEN DELETE FROM moderators WHERE 23=23;
il che equivale a cancellare tutta la tabella perché la where è sempre verificata (23 è sempre uguale a 23)
Fai così:, cambia nome al parametro idUser e chiamalo ad esempio p_IdUser
codice:
PROCEDURE Changerole (OldRole CHAR(8), Newrole CHAR(8), p_IdUser INT)
poi sostituisci nelle delete di conseguenza:
codice:
THEN DELETE FROM moderators WHERE iduser=p_IdUser;
vedi se va!