2013-10-23 7 views
14

मैं जब एक तैयार को अंतिम रूप देने () $ stmt- के बीच अंतर को स्पष्ट करने> पास() और $ stmt-> free_result कोशिश कर रहा हूँ mysqli कथन।


अब तक मैं का उपयोग करें:

$mysqli = new mysqli(host,user,password,database); 
$stmt = $mysqli->prepare(sql statement); 
[...] 
$stmt->free_result(); 
$mysqli->close(); 

और सब कुछ ठीक काम करने के लिए लगता है।

लेकिन मैंने देखा है कि बहुत से प्रोग्रामर $ stmt-> $ stmt-> free_result() के बजाय बंद करते हैं। और एक बार मैंने उन दोनों को देखा है:

$stmt->free_result(); 
$stmt->close(); 
$mysqli->close(); 

तो मुझे किस परिस्थिति में और क्यों चुनना चाहिए?

उत्तर

22

$stmt->free_result() परिणाम सेट से संबंधित स्मृति को मुक्त करता है, जबकि $stmt->close() एक तैयार कथन से संबंधित स्मृति को मुक्त करता है। इसके बाद $stmt->close() पर कॉल करने से कोई भी परिणाम अभी भी रद्द हो जाएगा।

संक्षेप में, $stmt->close() पर कॉल करने से $stmt->free_result() पर कॉल करने के समान प्रभाव प्रदान किया जाएगा क्योंकि यह परिणाम सेट को भी रद्द कर देता है। लेकिन $stmt->free_result() पर कॉल करने से तैयार कथन द्वारा उपयोग की जाने वाली मेमोरी को साफ़ नहीं किया जाएगा, इस मामले में आपको $stmt->close() का उपयोग करना होगा।

जहां तक ​​कोई भी उपयोग करने के लिए जाता है - ऐसी स्थितियां हो सकती हैं जहां आप प्रारंभ किए गए तैयार कथन का उपयोग करने का इरादा रखते हैं, लेकिन अब आपके पास वर्तमान में मौजूद परिणाम सेट की आवश्यकता नहीं है। ऐसे मामले में आप $stmt->close() पर कॉल करने पर प्रतीक्षा करेंगे जब तक आप तैयार कथन के साथ नहीं होते हैं और इसके बजाय किसी अन्य कथन को निष्पादित करने से पहले $stmt->free_result() पर कॉल करें।

+0

आदर्श स्पष्टीकरण! – neophyte

2

PHP आपके कनेक्शन को समाप्त कर देगा और संसाधन समाप्त होने के बाद संसाधन को मुक्त करेगा;

mysqli::closeएक तैयार कथन बंद कर देता है।

चूंकि उपलब्ध कुल कनेक्शन की संख्या सीमित है, संसाधन को मुक्त करने के साथ आप जो दूसरा कर रहे हैं वह एक अच्छा अभ्यास है।

और

mysqli_stmt::free_resultदिया बयान संभाल के लिए परिणाम स्मृति संग्रहीत मुक्त करता है।

स्पष्ट रूप से संसाधन को मुक्त करने का अच्छा अभ्यास है जब आपको अब उनकी आवश्यकता नहीं है। यह सर्वर में भारी लोड करने से बच सकता है जब एक ही समय में कई अनुरोध किए जाते हैं।

दोनों कभी भी आमंत्रित करने के लिए कड़ाई से जरूरी नहीं हैं, और दोनों का उपयोग करने का एक अच्छा अभ्यास है।

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