För det första saknar du en parentes, som du inte alls behöver använda i det här fallet
Ändra din frågesträng till
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
eller till bara
Insert Into archived select * from registrations WHERE id=$id
Här är SQLFiddle demo
För det andra INSERT
returnerar inte en resultatuppsättning så du bör inte använda mysql_fetch_array()
.
För det tredje om din avsikt var att flytta inte bara för att kopiera data så måste du också radera raden som du kopierade efteråt.
Nu kan du lägga allt i en lagrad procedur
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 ;
Exempel på användning:
CALL move_to_archive(2);
Här är SQLFiddle demo