Yii - 数据访问对象

要执行 SQL 查询,您应该遵循以下步骤 −

  • 使用 SQL 查询创建 yii\db\Command
  • 绑定参数(非必需)
  • 执行命令。

步骤 1 − 在 SiteController 中创建一个名为 actionTestDb 的函数。

public function actionTestDb(){
    // 返回一组行。每行都是列名和值的关联数组。
    // 如果查询没有返回结果,则返回一个空数组
    $users = Yii::$app->db->createCommand('SELECT * FROM user LIMIT 5')
    ->queryAll();
    var_dump($users);
    // 返回一行(第一行)
    // 如果查询没有结果,则返回 false
    $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE id=1')
    ->queryOne();
    var_dump($user);
    // 返回一列(第一列)
    // 如果查询没有返回结果,则返回一个空数组
    $userName = Yii::$app->db->createCommand('SELECT name FROM user')
    ->queryColumn();
    var_dump($userName);
    // 返回标量值
    // 如果查询没有结果,则返回 false
   $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')
      ->queryScalar();
   var_dump($count);
}

以上示例展示了从数据库获取数据的各种方法。

步骤 2 − 转到地址 http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。

创建 actionTestDb 输出

创建 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);
   $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);
      //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 −如果您访问地址 http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。

Modified actionTestDb Output

INSERT、UPDATE 和 DELETE 查询

对于 INSERT、UPDATE 和 DELETE 查询,您可以调用 insert()、update() 和 delete() 方法。

步骤 1 − 以这种方式修改 actionTestDb 方法。

public function 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);
      // 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);
      // 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 − 在 Web 浏览器的地址栏中输入 URL http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。

插入更新删除查询示例