Trước hết, bạn đang thiếu một dấu ngoặc đơn, mà bạn không cần phải sử dụng trong trường hợp này
Thay đổi chuỗi truy vấn của bạn thành
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
hoặc chỉ
Insert Into archived select * from registrations WHERE id=$id
Đây là SQLFiddle bản demo
Thứ hai INSERT
không trả về tập kết quả, vì vậy bạn không nên sử dụng mysql_fetch_array()
.
Thứ ba nếu mục đích của bạn là di chuyển không chỉ để sao chép dữ liệu, sau đó bạn cũng cần xóa hàng mà bạn đã sao chép sau đó.
Bây giờ bạn có thể đặt tất cả trong một quy trình được lưu trữ
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 ;
Cách sử dụng mẫu:
CALL move_to_archive(2);
Đây là SQLFiddle bản demo