Tout d'abord, il vous manque une parenthèse, que vous n'avez pas du tout à utiliser dans ce cas
Remplacez votre chaîne de requête par
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
ou simplement
Insert Into archived select * from registrations WHERE id=$id
Voici SQLFiddle démo
Deuxièmement INSERT
ne renvoie pas de jeu de résultats, vous ne devez donc pas utiliser mysql_fetch_array()
.
Troisièmement, si votre intention était de bouger non seulement pour copier des données, vous devez également supprimer la ligne que vous avez copiée par la suite.
Maintenant, vous pouvez tout mettre dans une procédure stockée
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 ;
Exemple d'utilisation :
CALL move_to_archive(2);
Voici SQLFiddle démo