2010-02-22 17 views
7

मैं एक mysql संग्रहीत प्रक्रिया के साथ एक प्रश्न चला रहा हूँ पर "सिंक्रनाइज़ेशन से बाहर कमांड":संग्रहित प्रक्रिया का कारण बनता है अगले क्वेरी

$AddProf_qr = mysql_query("call AddStudent('$d_Pass', '$d_Titl', '$d_Firs', '$d_Midd', '$d_Last', '$d_Addr', '$d_City', '$d_Stat', '$d_County', '$d_Zipc', $d_Gend, '$d_Birh', '$d_Phom', '$d_Phoh', '$d_Phoo', '$d_Email', '$d_Webs', '$d_Natn', '$d_Profsn', '$d_Compny', '$d_Desig', $d_ProfAcc)", $this->c_remote) or die ("first call" . mysql_error($this->c_remote)); 

मैं कॉल से सिर्फ एक परिणाम प्राप्त करना चाहिए: @@ पहचान = एक संख्या;

$AP_result = mysql_fetch_array($AddProf_qr); 
$CurrentSID = $AP_result['@@IDENTITY']; 

जो ठीक काम करता है। लेकिन जब मैं इसके बाद एक और mysql अद्यतन क्वेरी चलाता हूं, तो यह एक त्रुटि देता है:

त्रुटि: 2014 (CR_COMMANDS_OUT_OF_SYNC) संदेश: सिंक से बाहर आदेश;

mysql_free_result($AddProf_qr); 

लेकिन अभी भी एक ही: आप इस आदेश का अब

मैं डालने की कोशिश की है नहीं चल सकता।

MySQL कॉल ठीक से निष्पादित करता है शेष स्क्रिप्ट उपरोक्त टिप्पणी के बिना चलाता है। लेकिन वे एक ही समय में नहीं चलते हैं। मेरा सबसे अच्छा अनुमान यह है कि कॉल ऐसा कुछ कर रहा है जो इसे गड़बड़ कर रहा है।

+0

पर

नज़र एक विकल्प mysqli या पीडीओ का उपयोग करने जा रहा है? – VolkerK

+0

मेरे पास mysql (कई प्रश्न) में लिखी गई संपूर्ण लिपि है। मैं उम्मीद कर रहा था कि अगर कोई जानता है कि यह क्या है, इससे पहले कि मैं इसे फिर से लिखूं। – DMin

+3

mysql() बकवास का ढेर है और – hobodave

उत्तर

8

आपकी संग्रहीत प्रक्रिया एकाधिक परिणाम लौट रही है। this post

समाधान देखें?

  • उपयोग mysqli_multi_query
  • प्राचीन mysql लाइब्रेरी का उपयोग कर बंद करो - mysqli में मैं "बेहतर" के लिए खड़ा है - अच्छे कारण के साथ।
+0

बहिष्कृत है mysqli इस समस्या को ठीक नहीं करता है, लेकिन उत्तर बहुत उपयोगी था :-) – Richard

0

चेक यहाँ से बाहर: http://us3.php.net/manual/en/function.mysql-query.php टिप्पणियों में, एक पुरुष का दावा है कि वह इसे MYSQL_MULTI_RESULTS (131,072) के लिए कनेक्शन ध्वज की स्थापना करके काम कर दिया।

लेकिन यह बहुत mysqli उपयोग करने के लिए बेहतर होगा ...

+0

ठीक है, इसे हल किया गया है। दुनिया में सबसे अच्छा समाधान नहीं है, लेकिन जब तक यह काम करता है, मैं खुश हूं। यह मेरी लिपि में पहली बार पूछताछ थी। मैंने डीबी से कनेक्शन बनाया, क्वेरी चलाई। कनेक्शन बंद कर दिया। एक नया कनेक्शन बनाया और बाकी स्क्रिप्ट चलाया। :) – DMin

2

@DMin हाँ कि काम करेगा, लेकिन आप सर्वर अभी या बाद में दुर्घटना होगा। बस गणित करें, एक पृष्ठ पर एक बचाव जो डेटाबेस को 3 * प्रक्रियाओं की संख्या बनाता है! बस इसके बारे में सोचो!

[अद्यतन] समाधान:

$aCategory = array(); 
$it=0; 
$res = $mysqli->multi_query("call ListCategory();"); 
if($res) { 
    do { 
    if ($result = $mysqli->store_result()) { 

     while($row = $result->fetch_row()) { 
       $aCategory[$it] =$row; 
       $it= $it + 1; 
     } 
     $result->close(); 
    } 
    } while($mysqli->next_result()); 
} 

foreach($aCategory as $row){ 
    echo . $row[0] . " - " . $row[1] . "<br />"; 
} 

बस जोड़ने के लिए कि आप अगले नियमित कॉल करने के लिए तैयार कर रहे हैं चाहता था।

पुनश्च: यह वैसे मैं

echo $aCategory['category_id'] ; 
//or 
echo $aCategory->category_id; 
//just 
echo $aCategory[0] 
0

mysql_free_result (ग्राहक> रेस) का उपयोग नहीं कर सकता है;

while (mysql_more_results(client->conn)) 
{ 
    mysql_next_result(client->conn); 
} 

यह मेरे लिए आकर्षण किया :)

0

परिणाम सेट एक संग्रहीत प्रक्रिया से लौटे mysqli_query का उपयोग कर सही ढंग से प्राप्त नहीं किया जा सकता है()। Mysqli_query() फ़ंक्शन कथन निष्पादन को जोड़ता है और पहले परिणाम को एक buffered परिणाम सेट में लाता है, यदि कोई हो। हालांकि, उपयोगकर्ता से छिपी हुई अतिरिक्त संग्रहीत प्रक्रिया परिणाम सेट हैं जो mysqli_query() को उपयोगकर्ता अपेक्षित परिणाम सेट को वापस करने में विफल होने का कारण बनता है।

संग्रहीत प्रक्रिया से लौटाए गए परिणाम सेट mysqli_real_query() या mysqli_multi_query() का उपयोग करके प्राप्त किए जाते हैं। दोनों कार्य एक कथन द्वारा लौटाए गए किसी भी परिणाम सेट को प्राप्त करने की अनुमति देते हैं, जैसे कि कॉल। official manual

संबंधित मुद्दे