दिलचस्प पोस्ट
कार्यक्रम के लिए शुरुआत करने वाले को पढ़ाने के लिए सर्वोत्तम तरीके हैं? जावा में एक से अधिक बार लॉन्च कैसे करें? सी: सॉकेट कनेक्शन टाइमआउट क्या किसी प्राकृतिक भाषा से तिथियों और समय को पार्स करने के लिए कोई अजगर पुस्तकालय है? सी + + स्थिर वर्चुअल सदस्य? एकाधिक फ़ाइलों को लिखने के लिए Log4net कॉन्फ़िगर करें स्ट्रिंग में डबल उद्धरण बचें एसक्यूएल सर्वर मौजूदा सारणी के लिए ऑटो इंप्रेशन प्राथमिक कुंजी जोड़ता है एमपीआई में आउटपुट का ऑर्डर देना मैक ओएस एक्स 10.6.4 पर अजगर 2.7 की स्थापना कैसे करें? आईओएस लॉन्चिंग सेटिंग -> प्रतिबंध यूआरएल योजना ब्राउज़र बंद होने के बाद भी सत्र रखना संभव है? एक सरल कमांड लाइन कार्यक्रम या बैकअप एसक्यूएल सर्वर डेटाबेस स्क्रिप्ट क्या है? मैं वेब पेज की वेब पेज को कैसे प्राप्त करूं? Python का उपयोग करते हुए xlsx फाइल पढ़ना

"अवैध पैरामीटर संख्या: पैरामीटर परिभाषित नहीं किया गया था" डेटा डालने

अद्यतन करें

मूल्यों को सूचीबद्ध करते समय मैं एक छोटी सी गलती कर रहा था मुझे ": उपयोगकर्ता नाम" रखना चाहिए और नहीं ": अन्य नाम" मुझे लगता है कि इस प्रश्न का उत्तर क्रेडिट किसी के लिए स्वतंत्र है जो इसे चाहता है? या मैं सवाल हटाना?

मूल

मैं थोड़ी देर के लिए Yii के सक्रिय रिकॉर्ड पैटर्न का उपयोग कर रहा हूं अब, मेरे परियोजना को एक छोटे लेनदेन के लिए एक अलग डाटाबेस तक पहुंचने की आवश्यकता है। मैंने सोचा था कि यी के डीएओ इस के लिए अच्छा होगा। हालांकि, मुझे एक गुप्त त्रुटि मिल रही है

सीडीबी कॉमांड SQL कथन निष्पादित करने में विफल रहा है: SQLSTATE [HY093]: अमान्य पैरामीटर संख्या: पैरामीटर परिभाषित नहीं किया गया था

यहां मेरा कोड है:

public function actionConfirmation { $model_person = new TempPerson(); $model = $model_person->find('alias=:alias',array(':alias'=>$_GET['alias'])); $connection=Yii::app()->db2; $sql = "INSERT INTO users (username, password, ssn, surname , firstname, email, city, country) VALUES(:alias, :password, :ssn, :surname , :firstname, :email, :city, :country)"; $command=$connection->createCommand($sql); $command->bindValue(":username", $model->alias); $command->bindValue(":password", substr($model->ssn, -4,4)); $command->bindValue(":ssn", $model->ssn); $command->bindValue(":surname", $model->lastName); $command->bindValue(":firstname", $model->firstName); $command->bindValue(":email", $model->email); $command->bindValue(":city", $model->placeOfBirth); $command->bindValue(":country", $model->placeOfBirth); $command->execute(); $this->render('confirmation',array('model'=>$model)); } 

यह निम्न क्वेरी तैयार करता है (जैसा कि एप्लिकेशन लॉग पर देखा गया है):

 INSERT INTO users (username, password, ssn, surname, firstname, email , city, country) VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country); 

$model->placeOfBirth शहर और काउंटी दोनों मूल्यों में होना चाहिए। यह एक टाइपो नहीं है (बस एक मूर्खतापूर्ण बात मुझे करना है)।

वेब के समाधान से एकत्रित समाधान ""अवैध पैरामीटर संख्या: पैरामीटर परिभाषित नहीं किया गया था" डेटा डालने"

सिर्फ एक जवाब देने के लिए – क्योंकि यह त्रुटि बहुत आम है – यहां कुछ कारण हैं:

1) इस :parameter नाम गलती से बाइंड से मेल नहीं खाती (टाइपो?)। यह वही है जो यहाँ हुआ है उसके पास है :alias एसक्यूएल बयान में :alias , लेकिन बाध्य :username तो जब परम बाइंडिंग की कोशिश की गई, तो Yii / PDO को नहीं मिल सका :username एसक्यूएल स्टेटमेंट में :username , जिसका अर्थ यह "एक पैरामीटर शॉर्ट" था और एक त्रुटि फेंक दी।

2) पूरी तरह से एक पैरामीटर के लिए bindValue() जोड़ने की भूल। ये अन्य $critera तरह Yii में ऐसा करना आसान है जैसे $critera , जहां आपके पास कोई सरणी या पैरामीटर है ( $criteria->params = array(':bind1'=>'test', ':bind2'=>'test) )।

3) सीडीटाप्रोवाइडर पेजिंग और / या छंटनी के साथ विचित्र टकराव जब together उपयोग करते together और joins । इस को चिह्नित करने के लिए कोई विशिष्ट, आसान तरीका नहीं है, लेकिन सीडीटाप्रदाता के जटिल प्रश्नों का उपयोग करते समय मेरे पास अजीब समस्याएं हो रही हैं, जिनकी मापदंडों को हटा दिया गया है और यह त्रुटि हो रही है।

Yii में इन समस्याओं का निवारण करने का एक बहुत ही उपयोगी तरीका है कि आपकी कॉन्फ़िग फाइल में पैरामीटर लॉगिंग को सक्षम करना है । इसे अपनी config फ़ाइल में अपने db सरणी में जोड़ें:

 'enableParamLogging'=>true, 

और सुनिश्चित करें कि आपके log अनुभाग में CWebLogRoute मार्ग सेट है यह उस प्रश्न को प्रिंट करेगा जो दिया गया था और त्रुटि, और वह सभी पैरामीटर जो बाइंड करने का प्रयास कर रहा था। सुपर सहायक!

हो सकता है कि आप अपने लिए काम करने के बजाय एकल उद्धरण के भीतर एक परम बाध्य करने की कोशिश कर रहे हों।

की तुलना करें:

 Model::model()->findAll("t.description ilike '%:filter%'", array(':filter' => $filter)); 

साथ में:

 Model::model()->findAll("t.description ilike :filter", array(':filter' => '%' . $filter . '%')); 

मेरे लिए इस त्रुटि का एक कारण यह नहीं है कि आप पैरामीटरों की गतिशील सरणी के साथ काम कर रहे हैं, यदि आप किसी भी पैरामीटर को अनसेट नहीं करते हैं, तो आपको उनको पास करने से पहले उन्हें पुन: जानना होगा। इस का क्रूर भाग यह है कि आपका त्रुटि लॉग नहीं है अनुक्रमित दिखें, ऐसा लगता है कि सब कुछ ठीक है। उदाहरण के लिए:

 SELECT id WHERE x = ?, y = ?, z = ? 

लॉग उत्पन्न कर सकते हैं: अमान्य पैरामीटर संख्या: पैरामीटर पैरामीटर के साथ परिभाषित नहीं किया गया था ("x", "y", "z")

ऐसा लगता है कि यह कोई त्रुटि नहीं फेंकना चाहिए, लेकिन यदि अनुक्रमित कुछ ऐसा है:

 0 => x, 1 => y, 4 => z 

यह अंतिम पैरामीटर को अपरिभाषित मानता है क्योंकि यह कुंजी 2 की तलाश में है