सबसे पहले आप एक कोष्ठक खो रहे हैं, जिसका आपको इस मामले में बिल्कुल भी उपयोग नहीं करना है
अपनी क्वेरी स्ट्रिंग को
. में बदलेंInsert Into archived (select * from registrations WHERE id=$id)
^ ^
या सिर्फ
. के लिएInsert Into archived select * from registrations WHERE id=$id
यह रहा SQLFiddle डेमो
दूसरा INSERT
परिणामसेट नहीं लौटाता है, इसलिए आपको mysql_fetch_array()
. का उपयोग नहीं करना चाहिए ।
तीसरा यदि आपका इरादा स्थानांतरित करने . का था न केवल डेटा कॉपी करने के लिए बल्कि आपको बाद में कॉपी की गई पंक्ति को भी हटाना होगा।
अब आप इसे एक संग्रहित प्रक्रिया में रख सकते हैं
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 ;
नमूना उपयोग:
CALL move_to_archive(2);
यह रहा SQLFiddle डेमो