Po pierwsze brakuje Ci jednego nawiasu, którego w tym przypadku nie musisz używać
Zmień ciąg zapytania na
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
lub po prostu
Insert Into archived select * from registrations WHERE id=$id
Oto SQLFiddle demo
Po drugie INSERT
nie zwraca zestawu wyników, więc nie powinieneś używać mysql_fetch_array()
.
Po trzecie, jeśli Twoim zamiarem było przeprowadzka nie tylko po to, aby skopiować dane, ale musisz również usunąć wiersz, który skopiowałeś później.
Teraz możesz umieścić to wszystko w procedurze składowanej
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 ;
Przykładowe użycie:
CALL move_to_archive(2);
Oto SQLFiddle demo