Yii - Objetos de Acesso a Dados
Para executar um SQL query, você deve seguir estas etapas -
- Crie um yii \ db \ Command com uma consulta SQL.
- Parâmetros de vinculação (não obrigatório)
- Execute o comando.
Step 1 - Crie uma função chamada actionTestDb no 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);
}
O exemplo acima mostra várias maneiras de buscar dados de um banco de dados.
Step 2 - Vá para o endereço http://localhost:8080/index.php?r=site/test-db, você verá a seguinte saída.
Crie um comando SQL
Para criar um comando SQL com parâmetros, você deve sempre usar a abordagem de parâmetros de ligação para evitar a injeção de SQL.
Step 1 - Modifique o actionTestDb método desta forma.
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);
}
No código acima -
bindValue() - vincula um único valor de parâmetro.
bindValues() - vincula vários valores de parâmetro.
Step 2 - Se você for ao endereço http://localhost:8080/index.php?r=site/test-db, você verá a seguinte saída.
Consultas INSERT, UPDATE e DELETE
Para consultas INSERT, UPDATE e DELETE, você pode chamar os métodos insert (), update () e delete ().
Step 1 - Modifique o actionTestDb método desta forma.
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 - Digite o URL http://localhost:8080/index.php?r=site/test-db na barra de endereço do navegador da web e você verá a seguinte saída.