Yii 数据访问对象
要执行一个 SQL查询 ,您需要遵循以下步骤-
- 使用SQL查询创建一个yii\db\Command。
- 绑定参数(可选)。
- 执行命令。
步骤1 - 在SiteController中创建一个名为 actionTestDb 的函数。
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 resultuser = 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 resultcount = 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()方法。
步骤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 ,然后您将看到以下输出。