Za prvé vám chybí jedna závorka, kterou v tomto případě vůbec nemusíte používat
Změňte řetězec dotazu na
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
nebo jen
Insert Into archived select * from registrations WHERE id=$id
Zde je SQLFiddle demo
Za druhé INSERT
nevrací sadu výsledků, takže byste neměli používat mysql_fetch_array()
.
Za třetí, pokud bylo vaším záměrem přesunout se nejen pro kopírování dat, ale také musíte odstranit řádek, který jste zkopírovali později.
Nyní můžete vše vložit do uložené procedury
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 ;
Ukázkové použití:
CALL move_to_archive(2);
Zde je SQLFiddle demo