• Yii数据对象笔记


    要执行一个SQL查询,应该遵循以下步骤 -
    • 创建一个 yiidbCommand 的 SQL查询命令
    • 绑定参数(非必须)
    • 执行命令
    第1步 - 创建一个 actionTestDb()方法在 SiteController 控制器中。
    public function actionTestDb(){
       // return a set of rows. each row is an associative array of column names and values.
       // an empty array is returned if the query returned no results
       $users = Yii::$app->db->createCommand('SELECT * FROM user LIMIT 5')
          ->queryAll();
       var_dump($users); echo '<hr/>';
       // return a single row (the first row)
       // false is returned if the query has no result
       $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE id=1')
          ->queryOne();
       var_dump($user);echo '<hr/>';
       // return a single column (the first column)
       // an empty array is returned if the query returned no results
       $userName = Yii::$app->db->createCommand('SELECT name FROM user')
          ->queryColumn();
       var_dump($userName); echo '<hr/>';
       // return a scalar value
       // false is returned if the query has no result
       $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')
          ->queryScalar();
       var_dump($count);
    }
    
    上述例子演示从一个数据库中获取数据的几种方法。
    第2步 - 在浏览器打开URL地址:http://localhost:8080/index.php?r=site/test-db ,会看到输出如下图所示。

    创建一个 SQL命令
    要创建使用参数的 SQL 命令,应该始终使用绑定参数的方法来防止SQL注入攻击。
    第1步 - 修改 actionTestDb() 方法使用以以下的方式。
    public function actionTestDb() {
       $firstUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE id = :id')
          ->bindValue(':id', 1)
          ->queryOne();
       var_dump($firstUser);echo '<hr/>';
       $params = [':id' => 2, ':name' => 'User2'];
       $secondUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE
          id = :id AND name = :name')
          ->bindValues($params)
          ->queryOne();
       var_dump($secondUser);echo '<hr/>';
          //another approach
       $params = [':id' => 3, ':name' => 'User3'];
       $thirdUser = Yii::$app->db->createCommand('SELECT * FROM user WHERE
          id = :id AND name = :name', $params)
          ->queryOne();
       var_dump($thirdUser);
    }
    

    在上面的代码中 - 

    • bindValue() − 绑定单个参数值

    • bindValues() − 绑定多个参数值

    第2步 - 在浏览器打开URL地址:http://localhost:8080/index.php?r=site/test-db ,会看到输出如下图所示。

    INSERT, UPDATE 和 DELETE 查询

    对于INSERT,UPDATE和DELETE查询,可调用 insert(), update() 和 delete() 方法。
    第1步 - 修改 actionTestDb() 方法并使用以下代码:
     
    public function actionTestDb() {
          // INSERT (table name, column values)
          Yii::$app->db->createCommand()->insert('user', [
             'name' => 'My New User',
             'email' => 'mynewuser@gmail.com',
          ])->execute();
          $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
             ->bindValue(':name', 'My New User')
             ->queryOne();
          var_dump($user);echo '<hr/>';
          // UPDATE (table name, column values, condition)
          Yii::$app->db->createCommand()->update('user', ['name' => 'My New User
             Updated'], 'name = "My New User"')->execute();
          $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
             ->bindValue(':name', 'My New User Updated')
             ->queryOne();
          var_dump($user);echo '<hr/>';
          // DELETE (table name, condition)
          Yii::$app->db->createCommand()->delete('user', 'name = "My New User
             Updated"')->execute();
          $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE name = :name')
             ->bindValue(':name', 'My New User Updated')
             ->queryOne();
          var_dump($user);
    }
    

    第2步 - 在浏览器打开URL地址:http://localhost:8080/index.php?r=site/test-db,会看到输出如下图所示。

  • 相关阅读:
    (转)Ubuntu init启动流程分析
    读懂diff
    vs2010 sp1
    Git .gitignore文件的使用
    第一次尝试节奏跑(乳酸门槛跑)
    放松跑、间歇跑、节奏跑和LSD
    Tomcat6配置webdav协议
    Content-disposition
    php5.3到php7.0.x新特性介绍
    随机生成字符串
  • 原文地址:https://www.cnblogs.com/xiong63/p/7059026.html
Copyright © 2020-2023  润新知