Innanzitutto ti manca una parentesi, che non devi assolutamente usare in questo caso
Modifica la stringa di query in
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
o semplicemente
Insert Into archived select * from registrations WHERE id=$id
Ecco SQLFiddle demo
In secondo luogo INSERT
non restituisce un set di risultati quindi non dovresti usare mysql_fetch_array()
.
In terzo luogo, se il tuo intento era quello di trasferirti non solo per copiare i dati, devi anche eliminare la riga che hai copiato in seguito.
Ora puoi mettere tutto in una stored procedure
DELIMITER $$
CREATE PROCEDURE move_to_archive(IN _id INT)
BEGIN
START TRANSACTION;
INSERT INTO archived
SELECT *
FROM registrations
WHERE id = _id;
DELETE
FROM registrations
WHERE id = _id;
COMMIT;
END$$
DELIMITER ;
Esempio di utilizzo:
CALL move_to_archive(2);
Ecco SQLFiddle demo