首页 > 数据库 >Yii2 框架中,通过 yii\db\Command 对象来执行原生 SQL 语句

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

时间:2024-06-06 10:44:45浏览次数:8  
标签:users yii age db createCommand Command sql command

在 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 对象和参数绑定,你可以高效、安全地与数据库交互。

标签:users,yii,age,db,createCommand,Command,sql,command
From: https://www.cnblogs.com/css2020/p/18234671

相关文章

  • MyBatis的JdbcType与MySQL数据类型之间的对应关系
    MyBatis的JdbcType与MySQL数据类型之间存在一定的对应关系,这些映射帮助MyBatis在处理SQL查询时正确地将数据库中的数据类型转换为Java对象。以下是一些常用的MyBatisJdbcType与MySQL数据类型的对应关系:BIGINT-对应MySQL的BIGINT类型,用于存储大整数值。INTEGER -对应MySQL的......
  • cmake的add_custom_command如何处理多输出+多依赖
    intro在一个复杂的项目中,免不了需要动态生成文件,此时可能就需要用到cmake的add_custom_command命令,这个命令可以生成cmake识别的输出文件,并作为构建过程中其它命令的依赖和输出。add_custom_command(OUTPUToutput1[output2...]COMMANDcommand1[ARGS][args1...][COMMAND......
  • Body AdvancedBrep Geometry
    BodyAdvancedBrepGeometryBodyBrepGeometry是通过边界表示模型(包括NURBS)表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier ='Body'IfcShapeRepresentation.RepresentationType ='Advanced......
  • Android Studio使用ADB远程调试(真机)(通过无线调试)
    准备工作1)设备:笔记本电脑、安卓手机2)设备连接相同网络(如:同个WIFI)3)手机开启开发者模块、USB调试、USB安装ps:本人安卓手机是红米手机,开启开发者模式可参考:https://baijiahao.baidu.com/s?id=1758792460891751075&wfr=spider&for=pc操作步骤1)打开AndroidStudio,通过File->Proje......
  • 【YashanDB知识库】outline固化执行计划
    【问题分类】性能优化,功能使用【关键字】outline【问题描述】防止SQL执行计划突变,用outline固化执行计划【问题原因分析】防止SQL执行计划突变,用outline固化执行计划【解决/规避方法】点击查看代码SQL--创建测试outline:ol_ab/ol_baconnsales/salesCREATEOUTLINEol......
  • (数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用
    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,就在几天前,经过六年多的持续开发迭代,著名的开源高性能分析型数据库DuckDB发布了其1.0.0正式版本。DuckDB具有极强的单机数据分析性能表现,功能丰......
  • leveldb 代码阅读三
    options解读Options数据库设置压缩类型//数据库内容存储在一组块中,每个块包含一个键、值对序列。//在存储到文件中之前,可以压缩每个块。//下面的枚举描述用于压缩块的压缩方法(如果有)。enumCompressionType{ kNoCompression=0x0, kSnappyCompression=0x1}......
  • c# MongoDB.Driver 连接mongo 数据库失败的解决方法
    在连接数据库的时候连接本的的时候连接字符串是mongodb://localhost:端口号(默认27017)/数据库名(选填)用这种格式的连接字符串去做本地的测试是没问题的,但是连接服务器上面的数据库的时候就要加上用户名和密码,这个时候就需要在字符串的末尾添加后缀:mongodb://用户名:密码(都不......
  • CentOS-7.9 安装MongoDB6.0.6-server步骤
    下载解压wgethttps://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/RPMS/mongodb-org-server-6.0.6-1.el7.x86_64.rpmsudorpm-ivhmongodb-org-server-6.0.6-1.el7.x86_64.rpm安装MongoDBsudomkdir-p/usr/local/mongodb/data/usr/local/mongodb/log/usr/lo......
  • mysql阶段01 DBA介绍, 数据库介绍, mysql介绍, mysql二进制安装, mysql源码安装, syst
    数据库管理员DBA一、DBA的工作1.初级:mysql安装、搭建2.中级:数据库管理员DBA1)用户管理1.用户的权限2.用户可以操作的库3.用户的来源主机4.用户的密码grantshow,createonzh.*tozh@'172.16.1.%'identifiedby'123';2)数据管理1.数据备份2.数据恢复3.SQL......