दिलचस्प पोस्ट
एजेक्स में 302 रीडायरेक्ट को संभाल नहीं सकते हैं और क्यों? स्प्राइट किट आईओएस 7.1 दुर्घटना में दूरफ्रेंपर मुझे "char * s" के साथ आरंभ करने वाले स्ट्रिंग पर लिखे जाने पर "चार्ल्स " क्यों नहीं है, मुझे एक विभाजन त्रुटि क्यों मिली? कैसे प्रोग्रामेटिक रूप से विंडोज़ डाउनलोड फ़ोल्डर "% USERPROFILE% / Downloads" पाने के लिए? अजाक्स, बैक बटन और डोम अपडेट मैं पायथन से अतुल्यकालिक रूप से एक बाहरी कमांड कैसे चला सकता हूं? कैसे Django आदेश फार्म रेंडर करने के लिए आदेश पता है? निर्माण का निर्माण क्या होता है? त्रुटि: लिखने योग्य परमाणु संपत्ति एक संश्लेषित सेटर / गेटर को यूज़र डिफ़ाइंड सेटर / गेटर के साथ जोड़ नहीं सकती सिंक्रनाइज़ेशन और सिस्टम। आउट.प्रिंटलाइन कई पंक्तियों पर मूल्य विभाजित करें मैं एक .NET स्ट्रिंग कैसे छांटूं? क्या मुझे निर्माता या बाहरी कंस्ट्रक्टर के भीतर चर को आरम्भ करने चाहिए ASP.NET वेब फ़ॉर्म के साथ निर्भरता इंजेक्शन का उपयोग कैसे करें मल्टीथ्रेडड क्विकस्रॉर्ट या मर्जर्सोर्ट

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

अद्यतन करें

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

मूल

मैं थोड़ी देर के लिए 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 की तलाश में है