[SOLVED]bound variables doesn't match

this is the error that am getting

and this is my code




			$criteria = new CDbCriteria;

			$criteria->select = 'WSEmailAddress';

			$criteria->condition = 'WSMembershipSecretQuestion = :secret';

			$criteria->condition = 'WSMembershipMySecretQuestion = :mysecret';

			$criteria->condition = 'WSMembershipSecretAnswer = :answer';

			$criteria->params = array(

							':secret'=>$_POST['Wsmembers']['WSMembershipSecretQuestion'],

							':mysecret'=>$_POST['Wsmembers']['WSMembershipMySecretQuestion'],

							':answer'=>$_POST['Wsmembers']['WSMembershipSecretAnswer']

				);

			

			$email = Wsmembers::model()->find($criteria);



did i miss something ?




$criteria->condition = 'WSMembershipSecretQuestion = :secret';

$criteria->condition = 'WSMembershipMySecretQuestion = :mysecret';

$criteria->condition = 'WSMembershipSecretAnswer = :answer';



actualy you set only one - last condition

to add some condition use function


addCondition




$criteria->condition = 'WSMembershipSecretQuestion = :secret';

$criteria->addCondition('WSMembershipMySecretQuestion = :mysecret');

$criteria->addCondition('WSMembershipSecretAnswer = :answer');



Yes, the 2 and third condition will rewrite the previous.

Use the method add condition:




                        $criteria = new CDbCriteria;

                        $criteria->select = 'WSEmailAddress';

                        $criteria->addCondition('WSMembershipSecretQuestion = :secret');

                        $criteria->addCondition('WSMembershipMySecretQuestion = :mysecret');

                        $criteria->addCondition('WSMembershipSecretAnswer = :answer');

                        $criteria->params = array(

                                                        ':secret'=>$_POST['Wsmembers']['WSMembershipSecretQuestion'],

                                                        ':mysecret'=>$_POST['Wsmembers']['WSMembershipMySecretQuestion'],

                                                        ':answer'=>$_POST['Wsmembers']['WSMembershipSecretAnswer']

                                );

                        

                        $email = Wsmembers::model()->find($criteria);

This should work.

Another point, is really really really really bad practice to use $_POST[‘Wsmembers’][‘WSMembershipSecretQuestion’], use instead a schema like the action admin:




$model= new Wsmembers;

$model->attributes=$_POST['Wsmembers'];

$email= $model->searchEmail();




And the code of searchemail like:




                        $criteria = new CDbCriteria;

                        $criteria->select = 'WSEmailAddress';

                        $criteria->addCondition('WSMembershipSecretQuestion = :secret');

                        $criteria->addCondition('WSMembershipMySecretQuestion = :mysecret');

                        $criteria->addCondition('WSMembershipSecretAnswer = :answer');

                        $criteria->params = array(

                                                        ':secret'=>$this->WSMembershipSecretQuestion,

                                                        ':mysecret'=>$this->WSMembershipMySecretQuestion,

                                                        ':answer'=>$this->WSMembershipSecretAnswer

                                );

                        

                        return Wsmembers::model()->find($criteria);

problem solved thanks to both of ya ( thanks for the security tip @zac :) )