Чтобы выполнить запрос 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' => '[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); } }
Шаг 2 — Введите URL-адрес http: // localhost: 8080 / index.php? R = site / test-db в адресной строке веб-браузера, и вы увидите следующий вывод.