Чтобы выполнить запрос SQL , вы должны выполнить следующие шаги:
- Создайте команду yii \ db \ с запросом SQL.
- Параметры привязки (не обязательно)
- Выполните команду.
Шаг 1 — Создайте функцию с именем actionTestDb в 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);
}
В приведенном выше примере показаны различные способы получения данных из БД.
Шаг 2 — Перейдите по адресу http: // localhost: 8080 / index.php? R = site / test-db , вы увидите следующий вывод.

Создать команду 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 () — связывает несколько значений параметров.
bindValue () — привязывает одно значение параметра.
bindValues () — связывает несколько значений параметров.
Шаг 2 — Если вы перейдете по адресу http: // localhost: 8080 / index.php? R = site / test-db , вы увидите следующий вывод.

ВСТАВИТЬ, ОБНОВИТЬ и УДАЛИТЬ Запросы
Для запросов 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' => 'mynewuser@gmail.com',
])->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 — Введите URL-адрес http: // localhost: 8080 / index.php? R = site / test-db в адресной строке веб-браузера, и вы увидите следующий вывод.