首页 文章

如何修复Yii中的错误CDbException?

提问于
浏览
1

我创建了一个名为“Customer”的表,我想创建一个简单的Yii应用程序来创建和查看 . 这是CustomerController.php中我的代码片段:

class CustomerController extends Controller
{

    public $layout = '//layouts/column2';

    public function actionCreate()
    {

        $model = new Customer();

        $this->redirect(array('view', 'id' => $model->id));

        $this->render('create', array(
            'model' => $model,
        ));
    }

    public function actionView()
    {

        $model = new Customer();

        $result = $model->viewCustomer();

        foreach ($result as $row) {

            echo $row["title"];
            echo $row["fname"];
            echo $row["lname"];
            echo $row["addressline"];
            echo $row["town"];
            echo $row["zipcode"];
            echo $row["phone"];
        }

        $this->render('view', array(
            'model' => $this->$model(),
        ));
    }
}

这是我的模型中名为Customer.php的代码

public function createCustomer()
{
    $connection = Yii::app()->db;
    $sql = "INSERT INTO Customer (title,fname,lname,addressline,town,zipcode,phone)VALUES(:title,:fname,:lname,:addressline,:town,:zipcode,:phone)";
    $command = $connection->createCommand($sql);
    $command->bindParam(":title", $title, PDO::PARAM_STR);
    $command->bindParam(":fname", $fname, PDO::PARAM_STR);
    $command->bindParam(":lname", $lname, PDO::PARAM_STR);
    $command->bindParam(":addressline", $addressline, PDO::PARAM_STR);
    $command->bindParam(":town", $town, PDO::PARAM_STR);
    $command->bindParam(":zipcode", $zipcode, PDO::PARAM_STR);
    $command->bindParam(":phone", $phone, PDO::PARAM_STR);
    $result = $command->execute();

    if ($result == 1) {
        return "ok";
    }

    public function viewCustomer()
    {
        $connection = Yii::app()->db;
        $sql = "Select * from Customer";
        $dataReader = $connection->createCommand($sql)->query();
        $dataReader->bindColumn(1, $title);
        $dataReader->bindColumn(2, $fname);
        $dataReader->bindColumn(3, $lname);
        $dataReader->bindColumn(4, $addressline);
        $dataReader->bindColumn(5, $town);
        $dataReader->bindColumn(6, $zipcode);
        $dataReader->bindColumn(7, $phone);
        $result = $dataReader->queryAll();
        return $result;
    }

}

但是,我总是遇到这种错误:

CDbException CDbCommand无法执行SQL语句:CDbCommand无法准备SQL语句:SQLSTATE [HY000]:常规错误:1没有此类表:Customer . 执行的SQL语句是:从Customer中选择* .

我的朋友说我没有获得 Value . 我该如何解决这个问题?请帮帮我们 . 先感谢您 . 顺便说一下,我正在使用PDO .

1 回答

  • 0

    我认为你是缺乏oops概念的编程新手 . 首先尝试理解oops概念,而不是容易理解Yii .

    现在我无法测试您的代码,但可能会为您提供建议 .

    你的控制器::

    class CustomerController extends Controller
    {
    
         public $layout='//layouts/column2';
    
         public function actionCreate()
         {
    
            $model = new Customer();
    
            $model = $model->find();
    
            if($model->id)
               $this->redirect(array('view','id'=>$model->id));
    
            $this->render('create',array(
               'model'=>$model,
           ));
    
        }
    
        public function actionView()
        {
    
         $model = new Customer();
    
         $result = $model->viewCustomer();    
    
         foreach ($result as $row) {
    
            echo $row["title"];
            echo $row["fname"];
            echo $row["lname"];
            echo $row["addressline"];
            echo $row["town"];
            echo $row["zipcode"];
            echo $row["phone"];
         }
    
         $this->render('view',array(
            'model'=>$model,
        ));
      }
    }.
    

    你的模特::

    public function createCustomer()
    {
    
         $connection = Yii::app()->db;
    
         $sql = "INSERT INTO Customer (title,fname,lname,addressline,town,zipcode,phone)VALUES(:title,:fname,:lname,:addressline,:town,:zipcode,:phone)";
    
        $command = $connection->createCommand($sql);
    
        $command->bindParam(":title",$this->title,PDO::PARAM_STR);
    
        $command->bindParam(":fname",$this->fname,PDO::PARAM_STR);
    
        $command->bindParam(":lname",$this->lname,PDO::PARAM_STR);
    
        $command->bindParam(":addressline",$this->addressline,PDO::PARAM_STR);
    
        $command->bindParam(":town",$this->town,PDO::PARAM_STR);
    
        $command->bindParam(":zipcode",$this->zipcode,PDO::PARAM_STR);
    
        $command->bindParam(":phone",$this->phone,PDO::PARAM_STR);
    
        $result =  $command->execute();
    
        if ($result == 1){
    
            return "ok";
    
        }
    }
    

    public function viewCustomer(){

    $connection = Yii::app()->db;
    
        $sql = "Select * from Customer";
    
        $dataReader = $connection->createCommand($sql)->query();
    
        $dataReader->bindColumn(1,$this->title);
    
        $dataReader->bindColumn(2,$this->fname);
    
        $dataReader->bindColumn(3,$this->lname);
    
        $dataReader->bindColumn(4,$this->addressline);
    
        $dataReader->bindColumn(5,$this->town);
    
        $dataReader->bindColumn(6,$this->zipcode);
    
        $dataReader->bindColumn(7,$this->phone);
    
        $result = $dataReader->queryAll();
    
        return $result;
    
      }
    

    我希望我的代码更改能够正常工作 . 最好是尝试使用CDbCriteria获取记录和CActiveRecord的save()函数来保存数据库中的记录 .

相关问题