php - How to create and call MySQL stores procedures? -


तालिका [ file_request ] संरचना:

  user_id [ INT] file_id [CHAR (10)] all_files   

यह एसक्यूएल कोड है जो MySQL clien में ठीक काम करता है: मैं

  का उपयोग कर रहा हूँ DROP PROCEDURE IF EXISTS check_user_files; DELIMITER \\ प्रसंस्करण चेक_यूसर_फ़ाइलें (IN p_user_id INT, IN p_file_id CHAR (10), IN p_all_files VARCHAR (500)) यदि पहले से (फाइल 1 अनुरोध से चुनें file_request WHERE user_id = p_user_id और movie_id = p_file_id) तो अद्यतन file_request SET `requring_date` = अभी (), `all_files` = p_all_files जहां` user_id` = p_user_id और `movie_id` = p_file_id; फाइल में प्रवेश करें (`user_id`,` requring_date`, `मूवी_आईडी`,` सभी_फाइल`) मूल्यों को दर्ज करें (p_user_id, NOW (), p_file_id, p_all_files); अगर अंत; END \\ DELIMITER; कॉल चेक_यूसर_फ़ाइलें ('23 ',' टी 40431284 ',' 07 08 10 11 13 14 '); DELIMITER; कॉल चेक_यूसर_फ़ाइलें ('23 ',' एफ 87951 ',' 01 02 03 ');   

और मैं PHP से एसक्यूएल क्वेरी को बनाने और निष्पादित करने की कोशिश कर रहा हूं [काम नहीं किया]:

  // कॉल प्रक्रिया बयानों foreach ($ $ डेटा के रूप में fileData = & gt; $ value) {$ callSP। = "DELIMITER; \ n कॉल चेक_जर्स_फाइलें ('$ userID', '$ key', '$ value'); \ n"; } $ Insert_file_request_query = "रिक्त प्रक्रिया अगर चेक_जर्स_फाइलें; DELIMITER \\\\ बनाएँ प्रक्रिया चेक_यूसर_फ़ाइलें (IN p_user_id INT, IN p_file_id CHAR (10), IN p_all_files VARCHAR (500)) यदि पहले से मौजूद है (फ़ाइल 1 अनुरोध से 1 चयन करें WHERE user_id = p_user_id और movie_id = p_file_id) अब अपलोड करें file_request SET `requring_date` = NOW (),` all_files` = p_all_files WHERE 'user_id` = p_user_id और `movie_id` = p_file_id; फाइल में file_request दर्ज करें (` user_id`, `requring_date`,` movie_id `,` सभी_फाइल`) मूल्य (p_user_id, NOW (), p_file_id, p_all_files); END यदि; एंड \\\\ $ $ callSP "; mysqli_query ($ कोन, $ insert_file_request_query);   

PHP से निर्मित एसक्यूएल क्वेरी जो MySQL क्लाइंट के रूप में काम नहीं कर पाई!!

तो, मैं इसे कैसे ठीक कर सकता हूँ?! < P> [update1]

मैंने पाया है कि एसक्यूएल क्वेरी को विशेष प्रारूप में होना चाहिए [उस फार्मेट जो कि MySQL क्लाइंट में ठीक काम करते हैं ] या काम नहीं करना चाहिए, मैंने कॉपी और पेस्ट करने की कोशिश की उस क्वेरी को जो PHP से मिलता है, क्वेरी कोड बनता है एक पंक्ति और निष्पादित नहीं किया जा सकता है MySQL क्लाइंट में भी।

[update2] जब मैं PHP से अकेले इसे निष्पादित करता हूं तो स्टोर प्रक्रिया बनाने का कोड ठीक काम करेगा। मेरा मतलब है, मैंने पूरी प्रक्रिया को तीन हिस्सों में विभाजित किया और उन्हें एक करके एक निष्पादित किया।

  part1: प्रक्रिया को छोड़ दें यदि यह मौजूद है; [Mysqli_query ()] part2 का उपयोग करके: प्रक्रिया बनाओ; [mysqli_query ()] part3ï ¼ से ?? प्रक्रिया को कॉल करें; [mysqli_multi_query ()] $ insert_file_request_query = '' के द्वारा; विदेशी मुद्रा ($ file $ $ key = & gt; $ मान के रूप में डेटा) {$ insert_file_request_query। = "कॉल चेक_सवे_फ़ाइल_कोई अनुरोध ('$ userID', '$ key', '$ value');"; } Mysqli_multi_query ($ conn, $ insert_file_request_query);   

और मेरा अंतिम समाधान MySQL में स्टोर प्रक्रिया बनाने और इसे PHP से कॉल करना था। यह अभी ठीक काम करता है।

बहुत बहुत धन्यवाद!

आप mysqli_query में कई कथनों को संयोजित नहीं कर सकते। संग्रहीत कार्यविधि की परिभाषा को कॉल से इसे विभाजित करें यदि वह अभी भी विफल रहता है, तो हमें आपको प्राप्त होने वाले पूर्ण और सटीक त्रुटि संदेश की आवश्यकता होगी।

Comments