दिलचस्प पोस्ट
उपयोगकर्ता 'रूट @ लोकलहोस्ट' के लिए प्रवेश निषेध (पासवर्ड का उपयोग करते हुए: नहीं) HTTP का उपयोग करके सेट किए गए HTTPS के माध्यम से कुकीज पढ़ना एक jQuery प्लगइन का विस्तार करने के लिए सबसे अच्छा तरीका स्विफ्ट में एक XIB फ़ाइल के साथ कस्टम UIView क्लास को प्रारंभ / इंस्टाइज़ कैसे करें `Data.table` में गतिशील स्तंभ नामों का उपयोग करना क्या वेब साइट्स को वास्तव में ब्राउज़रों के लिए पूरा करने की आवश्यकता है जिनके पास जावास्क्रिप्ट सक्षम नहीं है? क्यों तरीकों का संदर्भ समानता नहीं है? ग्रहण अधिष्ठापन त्रुटि: INSTALL_FAILED_UID_CHANGED "गणित एच और पुस्तकालय लिंक -एमएम के साथ" भी "पाउ" के लिए अपरिभाषित संदर्भ डीबी तर्क विकसित करने में सहायता की आवश्यकता है पायथन में लंबी लाइन लपेटें jqgrid: चयनित पंक्ति में स्तंभ मान के आधार पर उपकरण पट्टी विकल्प कैसे सेट करें वसंत एमवीसी में ऑब्जेक्ट से एजेक्स को ऑब्जेक्ट कैसे वापस करना जावा में लिंकेजएरर्स से कैसे निपटें? फ़्रेम-बाय-फ़्रेम एनीमेशन प्रारंभ करना

सख्त मानकों: mysqli_next_result () mysqli_multi_query के साथ त्रुटि

मैंने multi_query का उपयोग करने की कोशिश की है लेकिन मैं एक सख्त मानक संदेश पॉप अप कर रहा हूं।

$querystring = "INSERT INTO responses VALUES('1', '2', '3', '4'); INSERT INTO responses VALUES('1', '2', '3', '4')"; if (mysqli_multi_query($db, $querystring)) { do { if ($result = mysqli_store_result($db)) { // } } while (mysqli_next_result($db)); } echo "end"; 

मुझे मिल गया त्रुटि संदेश है:

सख्त मानकों : mysqli_next_result (): कोई अगला परिणाम सेट नहीं है। कृपया इस फ़ंक्शन / विधि को कॉल करने की जांच करने के लिए, mysqli_more_results () / mysqli :: more_results () को कॉल करें

मैंने जोड़ने और हटाने की कोशिश की -; लेकिन कोई भाग्य नहीं था।

Solutions Collecting From Web of "सख्त मानकों: mysqli_next_result () mysqli_multi_query के साथ त्रुटि"

जबकि पिपोडिनेंस ने $ क्विकस्ट्रिंग के भीतर त्रुटि को सही किया और समस्या को कम किया, वास्तविक समाधान सख्त मानकों के त्रुटि के बारे में प्रदान नहीं किया गया था।

मैं महोदय की सलाह से असहमत हूं, डू से बदलते समय ऐसा करना जरूरी नहीं है।

आपके द्वारा प्राप्त सख्त मानक संदेश काफी जानकारीपूर्ण है। पालन ​​करने के लिए, इसका उपयोग करें:

 do{} while(mysqli_more_results($db) && mysqli_next_result($db)); 

उसके बाद, आपको सशर्त बाहर निकलने या लूप के अंदर तोड़ने की कोई ज़रूरत नहीं है, क्योंकि तब की स्थिति एक त्रुटि की पहली घटना पर लूप को तोड़ देती है। * नोट करें, अगर डॉट-ईन के पहले अगर स्टेटमेंट लूप में प्रवेश से इनकार करेगी तो पहली क्वेरी में कोई त्रुटि है

आपके उदाहरण में, आप केवल INSERT प्रश्नों को चला रहे हैं, इसलिए आपको प्रक्रिया के लिए कोई भी परिणाम सेट नहीं मिलेगा। यदि आप कितनी पंक्तियों को जोड़ते हैं, यह गणना करना चाहते हैं, तो mysqli_affected_rows () का उपयोग करें

आपके प्रश्न के लिए एक पूर्ण समाधान के रूप में:

 if(mysqli_multi_query($db,$querystring)){ do{ $cumulative_rows+=mysqli_affected_rows($db); } while(mysqli_more_results($db) && mysqli_next_result($db)); } if($error_mess=mysqli_error($db)){echo "Error: $error_mess";} echo "Cumulative Affected Rows: $cumulative_rows"; 

आउटपुट:

  // if no errors Cumulative Affected Rows: 2 // if error on second query Error: [something] Cumulative Affected Rows: 1 // if error on first query Error: [something] Cumulative Affected Rows: 0 

देर से संपादित करें:

चूंकि लोग इस पोस्ट में मस्तिष्क के लिए नए हैं, मैं एक सामान्य लेकिन मजबूत स्निपेट की पेशकश करूँगा / बिना किसी नतीजे से निपटने के लिए क्वेरी को संभालने के लिए multi_query () का उपयोग करता हूं और यह प्रदर्शित करने के लिए कि किसी क्वेरी में सरणी में क्या संभाला जा रहा है …

क्लासिक "यदि () {DO}} WHILE}" सिंटैक्स :

 if(mysqli_multi_query($mysqli,implode(';',$queries))){ do{ echo "<br><br>",key($queries),": ",current($queries); // display key:value @ pointer if($result=mysqli_store_result($mysqli)){ // if a result set while($rows=mysqli_fetch_assoc($result)){ echo "<br>Col = {$rows["Col"]}"; } mysqli_free_result($result); } echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs } while(next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); } if($mysqli_error=mysqli_error($mysqli)){ echo "<br><br>",key($queries),": ",current($queries),"Syntax Error:<br>$mysqli_error"; // display array pointer key:value } //if you want to use the snippet again... $mysqli_error=null; // clear variables reset($queries); // reset pointer 

पुनर्निर्मित पहिया "WHILE {}" सिंटैक्स (… जो उन लोगों के लिए जो पोस्ट टेस्ट लूप पसंद नहीं करते हैं):

 while((isset($multi_query) && (next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli))) || (!isset($multi_query) && $multi_query=mysqli_multi_query($mysqli,implode(';',$queries)))){ echo "<br><br>",key($queries),": ",current($queries); // display array pointer key:value if($result=mysqli_store_result($mysqli)){ while($rows=mysqli_fetch_assoc($result)){ echo "<br>Col = {$rows["Col"]}"; } mysqli_free_result($result); } echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs } if($mysqli_error=mysqli_error($mysqli)){ echo "<br><br>",key($queries),": ",current($queries),"Syntax Error:<br>$mysqli_error"; // display array pointer key:value } //if you want to use the snippet again... $multi_query=$mysqli_error=null; // clear variables reset($queries); // reset pointer 

इसलिए, या तो स्निपेट ने निम्नलिखित प्रश्नों को एक ही आउटपुट दिया है:

क्वेरी सरणी:

 $queries[]="SELECT * FROM `TEST`"; $queries[]="INSERT INTO `TEST` (Col) VALUES ('string1'),('string2')"; $queries[]="SELECT * FROM `TEST`"; $queries[]="DELETE FROM `TEST` WHERE Col LIKE 'string%'"; 

आउटपुट:

 0: SELECT * FROM `TEST` Rows = 0 1: INSERT INTO `TEST` (Col) VALUES ('string1'),('string2') Rows = 2 2: SELECT * FROM `TEST` Col = string1 Col = string2 Rows = 2 3: DELETE FROM `TEST` WHERE Col LIKE 'string%' Rows = 2 

अपनी आवश्यकताओं के अनुसार मेरे स्निपेट को संशोधित करें यदि आप एक बग को खोजने के लिए एक टिप्पणी छोड़ दो

कारण आपको यह चेतावनी मिलती है, यह सिर्फ इसलिए है क्योंकि आप do उपयोग dowhile कमांड ब्लॉक चलाने के बाद स्थिति का मूल्यांकन करता है। इसलिए जब कोई और नतीजे न हों, तो लूप की सामग्री एक अतिरिक्त समय भाग जाती है, जिससे चेतावनी उत्पन्न होती है।

while ($mysql->next_result()) का उपयोग while ($mysql->next_result()) … लूप को यह ठीक करना चाहिए। (सामान्य नोट पर: आपके जैसे पोस्ट टेस्ट लूप का उपयोग करना डेटाबेस प्रोग्रामिंग में काफी असामान्य था)

यदि कोड कविता है, तो मैं शेक्सपियर बनने की कोशिश कर रहा हूं!

(ओपी की ओर से जवाब पोस्ट किया)

हल किया:

 $querystring = "INSERT INTO responses VALUES('1', '2', '3', '4'); INSERT INTO responses VALUES('1', '2', '3', '4')"; if (mysqli_multi_query($db, $querystring)) { do { if (!mysqli_more_results($db)) { exit(); } } while (mysqli_next_result($db)); } echo "end";