Yii2 框架中,通过 yii\db\Command 对象来执行原生 SQL 语句

在 Yii2 中,你可以通过 yii\db\Command 对象来执行原生 SQL 语句。这包括查询操作(如 SELECT)和数据操作(如 INSERTUPDATEDELETE)。以下是一些常见的例子,展示如何在 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 对象和参数绑定,你可以高效、安全地与数据库交互。

posted @   季风时节  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示