Framework na którym operuje to Yii jak widać w tytule. Problem dotyczy wstawienia danych do bazy, które są przesłane z formularza. A więc tak mam formularz register.php (widok)
<?php if(Yii::app()->user->hasFlash('register')): ?> <div class="flash-success"> <?php echo Yii::app()->user->getFlash('register'); ?> </div> <?php else: ?> <div class="form"> <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'register-form-register-form', 'enableAjaxValidation'=>true, )); ?> <?php echo $form->errorSummary($model); ?> <div class="row"> <?php echo $form->labelEx($model,'username'); ?> <?php echo $form->textField($model,'username'); ?> <?php echo $form->error($model,'username'); ?> </div> <div class="row"> <?php echo $form->labelEx($model,'password'); ?> <?php echo $form->textField($model,'password'); ?> <?php echo $form->error($model,'password'); ?> </div> <div class="row"> <?php echo $form->labelEx($model,'email'); ?> <?php echo $form->textField($model,'email'); ?> <?php echo $form->error($model,'email'); ?> </div> <div class="row buttons"> <?php echo CHtml::submitButton('Submit'); ?> </div> <?php $this->endWidget(); ?> </div><!-- form --> <?php endif; ?>
następnie dane przesyłane są do SiteController.php (kontrolera) w którym odbywa się walidacja
<?php class SiteController extends Controller { //inne metody . . . //rejestracja public function actionRegister() { $model=new RegisterForm; { $model->attributes=$_POST['RegisterForm']; if($model->validate()) { //wywolanie metody wykonujacej zapytanie $model->wstaw(); Yii::app()->user->setFlash('register','dziekujemy za rejestracje.'); $this->refresh(); } } } }
i wywoływane jest metoda wstaw z RegisterForm.php (modelu), która ma za zadanie wstawić dane do bazy.
class RegisterForm extends CActiveRecord { //inne metody . . . public function wstaw() { $connection=Yii::app()->db; $sql="INSERT INTO tbl_user (username,password,email) VALUES(:username,:password,:email)"; $command=$connection->createCommand($sql); $command->bindParam(":username",$username,PDO::PARAM_STR); $command->bindParam(":password",$password,PDO::PARAM_STR); $command->bindParam(":email",$email,PDO::PARAM_STR); $command->execute(); } }
Niestety otrzymuję wyjątek CDbException o treści.
Cytat
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null. The SQL statement executed was: INSERT INTO tbl_user (username,password,email) VALUES(:username,:password,:email)
Nie bardzo wiem jak to ugryźć, na pierwszy rzut oka wydaje się być wszystko w porządku. Może ktoś bardziej doświadczony posłuży radą

EDIT:
Rozwiązałem to w inny sposób, a dokładniej za pomocą konstruktora zapytań:
$command = Yii::app()->db->createCommand() 'username'=>$this->username, 'password'=>MD5($this->password), 'email'=>$this->email, ));
Natomiast chętnie dowiem się dlaczego nie działa poprzedni kod.