Yii-data-access-objects

提供:Dev Guides
移動先:案内検索

Yii-データアクセスオブジェクト

  • SQLクエリ*を実行するには、次の手順に従う必要があります-
  • SQLクエリを使用して_yii \ db \ Command_を作成します。
  • バインドパラメーター(必須ではありません)
  • コマンドを実行します。

ステップ1 *-SiteControllerで *actionTestDb という関数を作成します。

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);
  //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);
  //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);
  //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);
}

上記の例は、DBからデータを取得するさまざまな方法を示しています。

ステップ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 にアクセスすると、次の出力が表示されます。

修正されたactionTestDb出力

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' => '[email protected]',
      ])->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 を入力すると、次の出力が表示されます。

更新削除クエリの挿入の例