For det første mangler du en parentes, som du slet ikke behøver at bruge i dette tilfælde
Skift din forespørgselsstreng til
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
eller til bare
Insert Into archived select * from registrations WHERE id=$id
Her er SQLFiddle demo
For det andet INSERT
returnerer ikke et resultatsæt, så du bør ikke bruge mysql_fetch_array()
.
For det tredje hvis din hensigt var at flytte ikke bare for at kopiere data, så skal du også slette den række, du kopierede bagefter.
Nu kan du lægge det hele i en lagret 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 ;
Eksempel på brug:
CALL move_to_archive(2);
Her er SQLFiddle demo