Yii2 框架中,通过 yii\db\Command 对象来执行原生 SQL 语句
在 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
对象和参数绑定,你可以高效、安全地与数据库交互。
愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。
能做事的做事,能发声的发声。有一分热,发一分光,就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。
此后如竟没有炬火:我便是唯一的光。
倘若有了炬火,出了太阳,我们自然心悦诚服的消失。不但毫无不平,而且还要随喜赞美这炬火或太阳;因为他照了人类,连我都在内
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?