आपकी प्रारंभिक समस्या यह है कि आप हर की जांच नहीं कर रहे थे विफलता के लिए कॉल करें, शुरुआत में बस कुछ ही। दोनों store_result
और bind_result
विफल भी हो सकता है।
आपकी विशिष्ट समस्या (एक बार जब आप प्रारंभिक समस्या को ठीक कर लेते हैं) यह है कि आप select *
कर रहे हैं एकाधिक प्राप्त करने के लिए कॉलम लेकिन आप केवल एक को बाध्य कर रहे हैं परिणाम में। यह आपको bind_result
. से प्राप्त त्रुटि संदेश से स्पष्ट होता है कॉल करें:
अगर आप select
. बदलते हैं तो कुछ इस तरह के बयान select id from ...
, आप पाएंगे कि यह काम करना शुरू कर देता है।
हालांकि, यह मानते हुए कि आप चाहते हैं अधिक कॉलम, आपको बाइंडिंग में अधिक चर प्रदान करना चाहिए, कुछ इस तरह:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
आप देखेंगे कि मैं select *
का उपयोग नहीं कर रहा हूं ऊपर, लगभग सभी स्थितियों में स्पष्ट कॉलम नामकरण का उपयोग करना बेहतर है ताकि:
- जब डीबी स्कीमा बदलता है तो आपको आश्चर्य नहीं होता;
- आपको केवल वही डेटा मिलता है जिसकी आपको आवश्यकता है;
- आप परिणाम चर के लिए कॉलम को ठीक से मैप कर सकते हैं।
लगभग केवल जगह मैंने कभी पाया है select *
. का उपयोग करना ठीक है DB विश्लेषण उपकरण में है जहाँ आप सब कुछ प्राप्त करना चाहते हैं। यदि आप पहले से जानते हैं कि आप क्या चाहते हैं, तो आपको यही पूछना चाहिए।