Yii - Oggetti di accesso ai dati

Per eseguire un file SQL query, dovresti seguire questi passaggi:

  • Crea un comando yii \ db \ con una query SQL.
  • Bind parametri (non obbligatorio)
  • Esegui il comando.

Step 1 - Crea una funzione chiamata actionTestDb nel 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'esempio sopra mostra vari modi per recuperare i dati da un DB.

Step 2 - Vai all'indirizzo http://localhost:8080/index.php?r=site/test-db, vedrai il seguente output.

Crea un comando SQL

Per creare un comando SQL con parametri, è necessario utilizzare sempre l'approccio dei parametri di associazione per impedire l'iniezione SQL.

Step 1 - Modifica il file actionTestDb metodo in questo modo.

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

Nel codice sopra -

  • bindValue() - lega un singolo valore di parametro.

  • bindValues() - lega più valori di parametri.

Step 2 - Se vai all'indirizzo http://localhost:8080/index.php?r=site/test-db, vedrai il seguente output.

INSERT, UPDATE e DELETE Queries

Per le query INSERT, UPDATE e DELETE, puoi chiamare i metodi insert (), update () e delete ().

Step 1 - Modifica il file actionTestDb metodo in questo modo.

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 - Digita l'URL http://localhost:8080/index.php?r=site/test-db nella barra degli indirizzi del browser web e vedrai il seguente output.