在 Yii2 中,你可以通过 yii\db\Command
对象来执行原生 SQL 语句。这包括查询操作(如 SELECT
)和数据操作(如 INSERT
、UPDATE
、DELETE
)。以下是一些常见的例子,展示如何在 Yii2 中执行 SQL 语句。
执行查询语句
执行 SELECT
查询并获取结果
你可以使用 queryAll()
、queryOne()
、queryColumn()
或 queryScalar()
方法来执行查询并获取不同形式的结果。
$db = Yii::$app->db;
// 查询所有记录
$sql = "SELECT * FROM users WHERE age > 30";
$command = $db->createCommand($sql);
$rows = $command->queryAll();
// 查询一条记录
$sql = "SELECT * FROM users WHERE id = 1";
$command = $db->createCommand($sql);
$row = $command->queryOne();
// 查询单列的所有值
$sql = "SELECT name FROM users";
$command = $db->createCommand($sql);
$column = $command->queryColumn();
// 查询单个值
$sql = "SELECT COUNT(*) FROM users";
$command = $db->createCommand($sql);
$count = $command->queryScalar();
执行数据操作语句
执行 INSERT
语句
$db = Yii::$app->db;
$sql = "INSERT INTO users (name, age, department) VALUES (:name, :age, :department)";
$command = $db->createCommand($sql);
$command->bindValue(':name', 'John Doe')
->bindValue(':age', 25)
->bindValue(':department', 'HR');
$command->execute();
执行 UPDATE
语句
$db = Yii::$app->db;
$sql = "UPDATE users SET age = :age WHERE id = :id";
$command = $db->createCommand($sql);
$command->bindValue(':age', 26)
->bindValue(':id', 1);
$command->execute();
执行 DELETE
语句
$db = Yii::$app->db;
$sql = "DELETE FROM users WHERE id = :id";
$command = $db->createCommand($sql);
$command->bindValue(':id', 1);
$command->execute();
使用事务
在执行多个相关的 SQL 操作时,你可以使用事务来确保数据的一致性。
$db = Yii::$app->db;
$transaction = $db->beginTransaction();
try {
// 执行多个SQL语句
$db->createCommand("INSERT INTO users (name, age, department) VALUES ('Jane Doe', 28, 'Finance')")->execute();
$db->createCommand("UPDATE users SET age = age + 1 WHERE department = 'Finance'")->execute();
// 提交事务
$transaction->commit();
} catch (\Exception $e) {
// 回滚事务
$transaction->rollBack();
throw $e;
}
使用参数绑定
使用参数绑定可以提高 SQL 语句的安全性,防止 SQL 注入攻击。
$db = Yii::$app->db;
$sql = "SELECT * FROM users WHERE age > :age";
$command = $db->createCommand($sql);
$command->bindValue(':age', 30);
$rows = $command->queryAll();
直接传递参数
你也可以直接传递参数,而无需使用 bindValue
。
$db = Yii::$app->db;
$sql = "SELECT * FROM users WHERE age > :age";
$command = $db->createCommand($sql, [':age' => 30]);
$rows = $command->queryAll();
这些例子展示了如何在 Yii2 中执行原生 SQL 语句,包括查询和数据操作。通过灵活使用 yii\db\Command
对象和参数绑定,你可以高效、安全地与数据库交互。