Yii - Objets d'accès aux données

Pour exécuter un SQL query, vous devez suivre ces étapes -

  • Créez une commande yii \ db \ avec une requête SQL.
  • Paramètres de liaison (non requis)
  • Exécutez la commande.

Step 1 - Créez une fonction appelée actionTestDb dans le 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);
   // 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);
}

L'exemple ci-dessus montre différentes manières d'extraire des données d'une base de données.

Step 2 - Aller à l'adresse http://localhost:8080/index.php?r=site/test-db, vous verrez la sortie suivante.

Créer une commande SQL

Pour créer une commande SQL avec des paramètres, vous devez toujours utiliser l'approche des paramètres de liaison pour empêcher l'injection SQL.

Step 1 - Modifier le actionTestDb méthode de cette façon.

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

Dans le code ci-dessus -

  • bindValue() - lie une seule valeur de paramètre.

  • bindValues() - lie plusieurs valeurs de paramètres.

Step 2 - Si vous allez à l'adresse http://localhost:8080/index.php?r=site/test-db, vous verrez la sortie suivante.

Requêtes INSERT, UPDATE et DELETE

Pour les requêtes INSERT, UPDATE et DELETE, vous pouvez appeler les méthodes insert (), update () et delete ().

Step 1 - Modifier le actionTestDb méthode de cette façon.

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

Step 2 - Tapez l'URL http://localhost:8080/index.php?r=site/test-db dans la barre d'adresse du navigateur Web et vous verrez la sortie suivante.