मैं mysqli तैयार कथन के बारे में शोध कर रहा था और मेरे पास इसके बारे में 2 प्रश्न हैं।mysqli तैयार कथन, परिणाम सेट को लूप कैसे करें
के रूप में मैं पढ़ रहा था, मैं यह पता लगाने की है कि एक तैयार बयान के निष्पादन के क्रम का अनुकरण तरह दिखता है:
$sql = 'SELECT image_id, filename, caption FROM images WHERE image_id = ?';
// connect to the database
$conn = ....
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($image_id, $filename, $caption);
// optional: get total of records in the result set
$stmt->store_result();
$numRows = $stmt->num_rows;
// loop through the result set
while ($stmt->fetch()) {
// code goes here...
}
or
// fetch the result for one record
$stmt->fetch()
// free & close
$stmt->free_result();
$stmt->close;
$conn->close();
यहाँ मेरा पहला सवाल है:
के रूप में मैं पढ़ रहा था, यह भी निम्नलिखित का उल्लेख करता है:
यदि आप चर के परिणाम को बाध्य नहीं करते हैं, तो $ पंक्ति = $ stmt-> fetch() का उपयोग करें, और प्रत्येक चर को $ पंक्ति ['column_name'] के रूप में एक्सेस करें। तो,
क्या वे परिणाम सेट को लूप करने के लिए 2 विधियों में से किसी एक का उपयोग कर कोई पेशेवर/विपक्ष हैं? यदि कोई फर्क नहीं पड़ता है, तो पहले स्थान पर $ stmt-> bind_result का उपयोग करके परिणाम बाध्य क्यों करें? क्या बात है यदि मैं इसके बजाय $ row = $ stmt-> fetch() का उपयोग कर सकता हूं?
यहाँ मेरी अन्य सवाल है:
- $ stmt-> free_result(); वास्तव में क्या मुक्त है? तैयार() या store_result() या अन्यथा?
- $ stmt-> बंद करें; मैं वास्तव में क्या बंद कर रहा हूँ? stmt_init() या तैयार() या अन्यथा?
उम्मीद है कि अपने जवाब मुझे बेहतर तैयार बयान को समझने तो मैं सुरक्षित कुछ निर्माण कर सकते हैं कर देगा ...
धन्यवाद
यदि मैं एक और क्वेरी निष्पादित करना चाहता हूं तो क्या होगा? क्या मैं स्मृति मुक्त करता हूं और स्टेटमेंट हैंडल को खोलता हूं? या क्या मुझे पूरी तरह से स्टेटमेंट हैंडल को बंद करने और $ stmt = $ conn-> stmt_init() के साथ एक नया खोलने की आवश्यकता है; ? – Marco
बस एक और प्रश्न निष्पादित करें और नजदीकी और नि: शुल्क के साथ कुछ भी न करें। कथन में नया परिणाम निर्दिष्ट करते समय, पुराने लोग बंद हो जाएंगे और स्वचालित रूप से मुक्त हो जाएंगे। – JvdBerg
ठीक है इसलिए अधिक प्रश्नों के लिए मुझे मूल रूप से तैयार करने की आवश्यकता है, bind_param, execute, bind_result। प्रत्येक नई क्वेरी के लिए stmt_init की आवश्यकता नहीं है, बस एक बार, डेटाबेस कनेक्शन के समान, बस एक बार। सही? – Marco