2012-07-10 15 views
5

हाल ही में मैंने PHP/MySQL में पीडीओ का उपयोग करने के लिए स्विच किया है और कुछ दर्जनों प्रश्नों को बदल दिया है। उनमें से ज्यादातर काम किया, लेकिन यह बहुत ही आसान एक $sql->execute()पीडीओ - अमान्य पैरामीटर संख्या

$sql=$pdo->prepare("SELECT id FROM user WHERE username = :username LIMIT 1"); 
$sql->execute(array(':username',$username)); 

PDOStatement :: निष्पादित() pdostatement.execute SQLSTATE [HY093] में एक अपवाद फेंकता है: अमान्य पैरामीटर संख्या: संख्या बाध्य चर की संख्या से मेल नहीं खाता की में टोकन ...

अनुसंधान के बाद, मैं इस लिंक मिल गया: https://bugs.php.net/bug.php?id=60515

... और इसलिए

करने के लिए क्वेरी को बदलने की कोशिश 210
$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = :username LIMIT 1"); 
$sql->execute(array(':username',$username)); 

लेकिन फिर भी एक ही परिणाम के साथ। क्या कोई देखता है कि क्या स्पष्ट रूप से गलत है या यह प्रश्न क्यों काम नहीं करता है जब सभी ने किया?

अग्रिम में बहुत बहुत धन्यवाद!

+0

"* पीडीओ - अवैध पैरामीटर संख्या ** हालांकि यह सही है ***"। नहीं, यह गलत है। – Lion

+0

@Lion: हाँ, आप सही हैं ... पहले ही शीर्षक बदल दिया है ... मैं अंधे की तरह था, आपकी मदद के लिए धन्यवाद! – Chris

उत्तर

5

केवल bindParam में ':username',$username काम करता है() विधि:

$sql->bindParam(':username', $username, PDO::PARAM_STR); 

एक नज़र यहाँ ले लो: http://www.php.net/manual/de/pdostatement.bindparam.php

के लिए आप एक उत्तीर्ण करने की आवश्यकता पर अमल इनपुट-केवल मानों की सही सरणी:

$sql->execute(array(':username' => $username)); 

प्लेसहोल्डर:

आप भी इस का उपयोग कर सकते हैं:

$sql->execute(array($username)); 

लेकिन यह आप इस के लिए आपकी क्वेरी को बदलने की जरूरत के लिए:

$sql=$pdo->prepare("SELECT `id` FROM `user` WHERE `username` = ? LIMIT 1");  

? palceholder के रूप में काम करता है और सरणी से चर लेते हैं। जब आप अपने SQL कथन में अधिक प्लेसहोल्डर का उपयोग करते हैं तो फ़ंक्शन इसके क्रम में सरणी से सभी चर लेता है।

11

यह बग नहीं है, आप केवल एक प्लेसहोल्डर के लिए दो पैरामीटर प्रदान करते हैं।

$sql->execute(array(':username',$username)); 

होना चाहिए

$sql->execute(array(':username' => $username)); 
+0

ओह मेरे भगवान ... धन्यवाद! शर्म की बात है! – Chris

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