Erstens fehlt Ihnen eine Klammer, die Sie in diesem Fall überhaupt nicht verwenden müssen
Ändern Sie Ihre Abfragezeichenfolge in
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
oder einfach zu
Insert Into archived select * from registrations WHERE id=$id
Hier ist SQLFiddle Demo
Zweitens INSERT
gibt keine Ergebnismenge zurück, daher sollten Sie mysql_fetch_array()
nicht verwenden .
Drittens, wenn Sie umziehen wollten nicht nur um Daten zu kopieren, dann müssen Sie auch die kopierte Zeile danach löschen.
Jetzt können Sie alles in eine gespeicherte Prozedur packen
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 ;
Beispielverwendung:
CALL move_to_archive(2);
Hier ist SQLFiddle Demo