Yii - Objetos de acceso a datos
Para ejecutar un SQL query, debe seguir estos pasos:
- Cree un comando yii \ db \ con una consulta SQL.
- Enlazar parámetros (no es obligatorio)
- Ejecuta el comando.
Step 1 - Crea una función llamada actionTestDb en el 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);
}
El ejemplo anterior muestra varias formas de obtener datos de una base de datos.
Step 2 - Ir a la dirección http://localhost:8080/index.php?r=site/test-db, verá el siguiente resultado.
Crear un comando SQL
Para crear un comando SQL con parámetros, siempre debe utilizar el enfoque de vincular parámetros para evitar la inyección de SQL.
Step 1 - Modificar el actionTestDb método de esta manera.
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);
}
En el código de arriba:
bindValue() - enlaza un solo valor de parámetro.
bindValues() - enlaza múltiples valores de parámetros.
Step 2 - Si vas a la dirección http://localhost:8080/index.php?r=site/test-db, verá el siguiente resultado.
INSERTAR, ACTUALIZAR y ELIMINAR consultas
Para las consultas INSERT, UPDATE y DELETE, puede llamar a los métodos insert (), update () y delete ().
Step 1 - Modificar el actionTestDb método de esta manera.
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 - Escriba la URL http://localhost:8080/index.php?r=site/test-dben la barra de direcciones del navegador web y verá el siguiente resultado.