Yii - 数据访问对象
要执行 SQL 查询,您应该遵循以下步骤 −
- 使用 SQL 查询创建 yii\db\Command。
- 绑定参数(非必需)
- 执行命令。
步骤 1 − 在 SiteController 中创建一个名为 actionTestDb 的函数。
public function actionTestDb(){ // 返回一组行。每行都是列名和值的关联数组。 // 如果查询没有返回结果,则返回一个空数组 $users = Yii::$app->db->createCommand('SELECT * FROM user LIMIT 5') ->queryAll(); var_dump($users); // 返回一行(第一行) // 如果查询没有结果,则返回 false $user = Yii::$app->db->createCommand('SELECT * FROM user WHERE id=1') ->queryOne(); var_dump($user); // 返回一列(第一列) // 如果查询没有返回结果,则返回一个空数组 $userName = Yii::$app->db->createCommand('SELECT name FROM user') ->queryColumn(); var_dump($userName); // 返回标量值 // 如果查询没有结果,则返回 false $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() − 绑定多个参数值。
步骤 2 −如果您访问地址 http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。
INSERT、UPDATE 和 DELETE 查询
对于 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 − 在 Web 浏览器的地址栏中输入 URL http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。