यदि आप स्थितीय मापदंडों का उपयोग करते हैं, तो आपके द्वारा पास किए जाने वाले मापदंडों की सरणी execute()
एक क्रमिक सरणी होना चाहिए। इसी तरह, यदि आप नामित पैरामीटर का उपयोग करते हैं, तो सरणी एक सहयोगी सरणी होनी चाहिए।
व्यवहार की पुष्टि करने के लिए यहां एक परीक्षण दिया गया है:
$stmt = $db->prepare("SELECT ?, ? ,?");
$params = array( 'a', 'b', 'c' );
// OK
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// ERROR!
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$stmt = $db->prepare("SELECT :A, :B, :C");
$params = array( 'a', 'b', 'c' );
// ERROR!
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// OK
if ($stmt->execute($params)) {
print_r($stmt->fetchAll());
}
ध्यान दें कि PHP के वर्तमान संस्करणों में, सहयोगी सरणी कुंजियाँ नहीं :
. के साथ पहले लगाना होगा @prodigitalson टिप्पणियों के रूप में। :
PHP के पुराने संस्करणों में सरणी कुंजियों में उपसर्ग की आवश्यकता होती थी।
यह भी ध्यान देने योग्य है कि जब मैंने एक ही क्वेरी में स्थितीय मापदंडों और नामित मापदंडों को मिलाने की कोशिश की तो मुझे बग और अप्रत्याशित व्यवहार का सामना करना पड़ा। आप भिन्न . में किसी भी शैली का उपयोग कर सकते हैं आपके ऐप में क्वेरी, लेकिन किसी दिए गए क्वेरी के लिए एक शैली या दूसरी को चुना।