Pertama, Anda kehilangan satu tanda kurung, yang tidak harus Anda gunakan dalam kasus ini sama sekali
Ubah string kueri Anda menjadi
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
atau hanya
Insert Into archived select * from registrations WHERE id=$id
Ini SQLFiddle demo
Kedua INSERT
tidak mengembalikan hasil jadi Anda tidak boleh menggunakan mysql_fetch_array()
.
Ketiga jika niat Anda adalah bergerak tidak hanya menyalin data, Anda juga perlu menghapus baris yang Anda salin setelahnya.
Sekarang Anda dapat memasukkan semuanya ke dalam prosedur tersimpan
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 ;
Contoh penggunaan:
CALL move_to_archive(2);
Ini SQLFiddle demo