2011-01-26 11 views
8

के कारण मैं mysqli :: multi_query के माध्यम से कई डिलीट चला रहा हूं और यह लाइन में अगली क्वेरी को गड़बड़ कर रहा है। निम्नलिखित त्रुटि है फेंक दिया जा रहा है।"सिंक से बाहर संचार करता है; आप अब इस कमांड को नहीं चला सकते हैं" - mysqli :: multi_query

Error - SQLSTATE HY000. 
Sql error: Commands out of sync; you can't run this command now 

क्या मुझे किसी भी तरह से बहुविकल्पीय को साफ़ करने की आवश्यकता है, तो यह मेरी अगली क्वेरी के साथ गड़बड़ नहीं करता है? इस त्रुटि का कारण क्या है?

और यह है कि कैसे मैं अपने multiquery

function deleteSomeTables($args){ 
    $sql = 'delete 1;delete another;'; 
    if($database->multi_query($sql)){ 
    return true; 
    }else{ 
    return false; 
    } 
} 

चला रहा हूँ मैं विंडोज 7

उत्तर

10

पर Xampp का नवीनतम संस्करण का उपयोग कर रहा mysqli::multi_query का उपयोग कर आप बंद प्रश्नों फायरिंग कर रहे हैं, लेकिन आप को संभाल करने की जरूरत है आगे बढ़ने से पहले उन प्रश्नों के परिणाम। documentation page परिणामों को संभालने के विभिन्न तरीकों का वर्णन करता है। एक बार संभाला जाने पर, आप अन्य प्रश्नों को ठीक करने में सक्षम होंगे।

त्रुटि संदेश जो आप सामना कर रहे हैं वास्तव में mysqli::query के लिए पृष्ठ पर थोड़ा बेहतर समझाया गया है (हालांकि ध्यान रखें कि mysqli :: क्वेरी इस उदाहरण में परिणाम ऑब्जेक्ट नहीं लौटाएगी, क्योंकि आप एक डिलीट कर रहे हैं)।

आप बहुआयामी को एकाधिक एकल प्रश्नों में बदल सकते हैं, मुझे नहीं पता कि प्रत्येक दृष्टिकोण के पेशेवर/विपक्ष क्या हैं।

+3

का उपयोग तो मैं कैसे क्वेरी स्पष्ट करते हैं, क्योंकि मैं हो रही है कुछ भी वापस नहीं कर रहा हूँ। आपने वास्तव में मुझे कुछ भी नहीं बताया है जिसे मैं पहले से नहीं जानता था। – andrew

+8

कुछ ऐसा ... 'do {$ mysqli-> use_result(); } जबकि ($ mysqli-> next_result()) ' – ZoFreX

9

यह मैं दूर करने के लिए मदद की त्रुटि 'सिंक्रनाइज़ेशन से बाहर कमानों':

do { 
    $mysqli_conn_obj->use_result(); 
}while($mysqli_conn_obj->more_results() && $mysqli_conn_obj->next_result()); 

सिर्फ multi_query बुला के बाद इस कोड को जोड़ें, यह परिणाम सेट का उपयोग करें और त्रुटि को हल करेंगे।

-1

सेवा के कोड सबसे अधिक संभावना है, आपकी समस्या का समाधान तुम मुझे पसंद प्रक्रियात्मक शैली उपयोग कर रहे हैं, इस

do { 
    if ($result = mysqli_store_result($connect)) { 
    mysqli_free_result($result); 
    } 
} while (mysqli_next_result($connect));