Yii2 - 数据库访问对象

详细Ubuntu 22.04 配置最新UR机械臂仿真环境(ros2-humble, ur-sim, ur-ros2-driver) 使用ubuntu22.04.01和ur-sim, ur-driver进行ur机械臂的仿真 阅读详情

配置好数据库连接后,你就可以通过下面的语法来使用了:

1
$connection= \Yii::$app->db;

你可以参考 [[yii\db\Connection]] 以了解有哪些属性可以配置。而且你可以配置多个连接,在应用程序中同时使用它们:

1
2
$primaryConnection= \Yii::$app->db;
$secondaryConnection= \Yii::$app->secondDb;

如果你不想把数据库连接定义为应用程序的组件,你也可以直接创建一个实例:

1
2
3
4
5
6
$connection=new \yii\db\Connection([
    'dsn'=>$dsn,
     'username'=>$username,
     'password'=>$password,
]);
$connection->open();

提示:如果你需要在建立连接时执行额外的SQL查询,你可以添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
return [
    // ...
    'components'=> [
        // ...
        'db'=> [
            'class'=>'yii\db\Connection',
            // ...
            'on afterOpen'=>function($event) {
                $event->sender->createCommand("SET time_zone = 'UTC'")->execute();
            }
        ],
    ],
    // ...
];

 

基本SQL查询

有了数据库连接实例,你可以使用 [[yii\db\Command]] 来执行SQL查询。

SELECT

返回多行数据:

1
2
$command = $connection->createCommand('SELECT * FROM post');
$posts = $command->queryAll();

返回单行数据:

1
2
$command = $connection->createCommand('SELECT * FROM post WHERE id=1');
$post = $command->queryOne();

返回列数据:

1
2
$command = $connection->createCommand('SELECT title FROM post');
$titles = $command->queryColumn();

返回统计数:

1
2
$command = $connection->createCommand('SELECT COUNT(*) FROM post');
$postCount=$command->queryScalar();

UPDATE, INSERT, DELETE etc.

对于非查询语句,你可以使用[[ yii\db\Command]]的 execute 方法:

1
2
$command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');
$command->execute();

也可以使用下面的语法,会自动处理好表名和列名引用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// INSERT
$connection->createCommand()->insert('user', [
    'name'=>'Sam',
    'age'=> 30,
])->execute();
 
// INSERT multiple rows at once
$connection->createCommand()->batchInsert('user', ['name','age'], [
    ['Tom', 30],
    ['Jane', 20],
    ['Linda', 25],
])->execute();
 
// UPDATE
$connection->createCommand()->update('user', ['status'=> 1], 'age > 30')->execute();
 
// DELETE
$connection->createCommand()->delete('user','status = 0')->execute();

 

引用表名和列名

大多数情况下,你使用如下语法引用表名和列名:

1
2
$sql = "SELECT COUNT([[$column]]) FROM {{$table}}";
$rowCount=$connection->createCommand($sql)->queryScalar();

在上述代码中 [[$column]] 将被转换为合适的列名引用,而 {{$table}} 将被转换为表名引用。

对于表名,有一个特殊变量 {{%$table}} ,会自动为表名添加前缀(如果有的话):

1
2
$sql = "SELECT COUNT([[$column]]) FROM {{%$table}}";
$rowCount=$connection->createCommand($sql)->queryScalar();

上述代码将会应用于 tbl_table ,如果你在配置文件中配置了如下的表前缀的话:

1
2
3
4
5
6
7
8
9
10
return [
    // ...
    'components'=> [
        // ...
        'db'=> [
            // ...
            'tablePrefix'=>'tbl_',
        ],
    ],
];

另外一个可选方法是使用[[yii\db\Connection::quoteTableName()]]和 [[yii\db\Connection::quoteColumnName()]] 方法来手动引用:

1
2
3
4
$column = $connection->quoteColumnName($column);
$table = $connection->quoteTableName($table);
$sql = "SELECT COUNT($column) FROM $table";
$rowCount=$connection->createCommand($sql)->queryScalar();

 

在Model 或 Controller中获取表前缀

var_dump(Admin::getDb()->tablePrefix); exit();


预备声明(Prepared statements)

为了安全传递查询参数,你可以使用预备声明(prepared statements),(译注:先声明参数,对用户输入进行escape后,进行参数替换,主要为了防止SQL注入):

1
2
3
$command = $connection->createCommand('SELECT * FROM post WHERE id=:id');
$command->bindValue(':id',$_GET['id']);
$post = $command->query();

此外,使用预备声明还可以对查询命令进行复用,如下使用不同的参数查询只需要准备一次command:

1
2
3
4
5
6
7
8
$command = $connection->createCommand('DELETE FROM post WHERE id=:id');
$command->bindParam(':id',$id);
 
$id = 1;
$command->execute();
 
$id = 2;
$command->execute();

 

事务(Transaction)

你可以向下面这样执行一个数据库事务:

1
2
3
4
5
6
7
8
9
$transaction=$connection->beginTransaction();
try {
    $connection->createCommand($sql1)->execute();
     $connection->createCommand($sql2)->execute();
    // ... 执行查询语句  ...
    $transaction->commit();
} catch(Exception$e) {
    $transaction->rollBack();
}

还可以嵌套事务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 外层事务
$transaction1=$connection->beginTransaction();
try {
    $connection->createCommand($sql1)->execute();
 
    // 内层事务
    $transaction2=$connection->beginTransaction();
    try{
        $connection->createCommand($sql2)->execute();
        $transaction2->commit();
    }catch(Exception $e) {
        $transaction2->rollBack();
    }
 
    $transaction1->commit();
} catch(Exception$e) {
    $transaction1->rollBack();
}

 

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构 Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。 阅读详情

相关推荐

最新版电子发票样式html+css--普通发票+增值发票

【代码】最新版电子发票样式html+css--普通发票+增值发票。

weixin_44110923的博客 3681

yii连接mysql主从_Connection 数据库主从连接源码剖析

连接总体流程随机打乱从库配置(master可以选择是否打乱,slave一定会打乱;如果master没有配置数组则直接使用$dsn和$username作为master的配置,也就是一主)遍历配置如果该库的配置在serverStatusCache缓存中生效则说明过期时间内该配置不可用,直接continue如果缓存无值则去实例化PDO(会新实例化一个类$db = Yii::createObject($c...

weixin_39624716的博客 584

期货套利策略(二)

接上一篇期货套利策略,随着对期货套利策略的深入了解,我发现套利策略不是那么好做的。下面将会讲碰到的一些问题。 上一篇文章中没有考虑滑点的问题,这里我们把滑点问题考虑进去。这里先说一些天勤api的买入点,天琴的买入点是当前K线的收盘价。碰到数据传输问题,还有计算等各方面问题,实际情况是无法在当前K线的收盘价买入的。这里我们把这方面问题考虑进去,利用api.wait_update()调到下一个k线数据...

qq_31611005的博客 1713

在Yii2中,如何配置数据库连接?

在Yii2中配置数据库连接,其实就像是要告诉你的应用程序怎么找到并使用你的数据库。这个过程可以想象成是给你的应用程序写一个小纸条,告诉它数据库在哪里、叫什么名字、以及进去需要的用户名和密码。

长风破浪会有时的博客 952

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3813

告别龟速下载!保姆级教程:用离线包5分钟搞定Arduino IDE的STM32开发环境(附最新库文件)

本文提供了一套完整的Arduino IDE离线配置方案,帮助开发者5分钟快速搭建STM32开发环境。通过详细的板支持包安装指南、文件校验方法和常见问题解决方案,彻底解决GitHub下载慢的问题,提升开发效率。

weixin_26802933的博客 364

yii2操作数据库 mysql 读写分离 主从复制

转载地址:http://www.kuitao8.com/20150115/3471.shtml 开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name )是数据源名称,用于指定数据库信息.如下所示: return [ // ... '

Terry - 专注外贸B2C 3864

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 355

yii框架mysql数据库_Yii 框架使用数据库(databases)的方法示例

本文实例讲述了Yii 框架使用数据库(databases)的方法。分享给大家供大家参考,具体如下:配置数据库连接 ¶开始之前,请确保你已经安装了 PHP PDO 扩展和你所使用的数据库的 PDO 驱动(例如 MySQL 的 pdo_mysql)。 对于使用关系型数据库来讲,这是基本要求。驱动和扩展安装可用后,打开 config/db.php 修改里面的配置参数对应你的数据库配置。 该文件默认包含这...

weixin_31881743的博客 269

使用 MATLAB/Simulink + Simscape Electrical + Simulink Design Optimization,构建一个沙漠环境中光伏组件灰尘积累与效率下降仿真模型

本文通过,构建了沙漠环境中光伏组件灰尘积累与效率下降仿真模型✅ 建立了风速-沙尘-积尘速率的物理关系✅ 仿真了灰尘积累过程及其对Isc 和 Pmax的影响✅ 量化分析了不同清洁策略的经济性✅ 提出了优化设计与智能运维建议。

xiaoheshang_123的博客 123

innovus:NRDB-2276 special net route layer与NanoRouteMode route layer冲突问题解决方法

NanoRouteMode中设置绕线层次2-6,但是被动到的special net有8-11的preferred route layer,这个层次可能是create_route_type+set_ccopt_property -net_type 定义的。二者绕线层次范围有冲突,导致在调整过这条net后再绕线就会提示失败。然后再下route_design 等route命令去绕别的net。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1103

在Yii2高级版的多模块项目中如何配置5个数据库连接?

'class' => 'yii\db\Connection', // 同样使用数据库连接组件dbname=stats_db', // 独立的数据库地址'username' => 'stats_user', // 专用账号(权限可只读)// 优化配置:针对统计查询的长耗时查询PDO::ATTR_TIMEOUT => 30, // 连接超时时间设为30秒],],Yii2多数据库配置├── 配置位置:common/config/main.php│ ├── 主库:默认组件名 'db'

长风破浪会有时的博客 836

NOC总线架构拓扑介绍

在开篇里,我们对芯片PPA有了初步的认识。下面,让我们从访存这个简单的问题开始展开介绍芯片基础概念。CPU是怎样访问内存的?简单的答案是,CPU执行一条访存指令,把读写请求发往内存管理单元。内存管理单元进行虚实转换,把命令发往总线。总线把命令传递给内存控制器,内存控制器再次翻译地址,对相应内存颗粒进行存取。之后,读取的数据或者写入确认按照原路返回。再复杂些,当中插入多级缓存,在每一层缓存都未命中的情况下,访问才会最终达到内存颗粒。

元直的博客 5296

Yii 2 数据库访问对象(DB DAO)完全指南:从连接管理到读写分离的实战解析

Yii 2 的数据库访问对象(Database Access Object,简称 DAO)是构建在 PHP PDO 之上的数据访问层,它提供了访问关系型数据库的面向对象 API,同时也是 Yii 2 中更高级数据访问方案([查询构建器](https://link.gitcode.com/i/e998f21a154f88d282d26213f6994970)与[活动记录](https://link.

gitblog_00752的博客 48

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Yii 2 Active Record 完全指南:面向对象的数据库访问与关系建模实战

Active Record 是 Yii 2 框架(本仓库 [yi/yii2](https://link.gitcode.com/i/9e37c69c7f36f21fd16f6948bade04ba))中连接数据库与业务模型的核心组件,它为开发者提供了一种面向对象的数据库访问方式:一个 Active Record 类对应一张数据表,一个实例对应表中的一行记录,实例的属性则对应行的列值。本文以 [do

gitblog_00026的博客 316

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Yii 2 DAO(数据库访问对象)完全指南:从连接管理、SQL 执行到事务与读写分离

Yii 2 的 DAO(Database Access Objects,数据库访问对象)是构建在 PHP PDO 之上、以面向对象 API 访问关系型数据库的底层基础设施,也是 Yii 框架中 [查询构造器](https://link.gitcode.com/i/fbbb230ac82bc537f726fedbc4b4321f) 与 [Active Record](https://link.git

gitblog_00463的博客 382

Yii 2 DAO 数据库访问对象完全指南:连接、查询、事务与读写分离实战

Yii 2 的 DAO(Database Access Objects,数据库访问对象)构建于 PHP 的 PDO 扩展之上,为访问关系型数据库提供了一套统一、面向对象的 API,是 [查询构造器(Query Builder)](https://link.gitcode.com/i/13e1b426a86bc08af2a59a820615d60f) 与 [Active Record](https:

gitblog_00376的博客 7

Yii 2 Active Record 完整实战指南:从模型声明到关联查询的面向对象数据库访问

Active Record(AR)是 Yii 2 框架中面向对象访问与操作数据库的核心机制:一个 AR 类对应一张数据库表,一个 AR 对象对应表中一行记录,对象的 *属性(attribute)* 则对应行的某一列。本文以官方俄文版指南 [docs/guide-ru/db-active-record.md](https://link.gitcode.com/i/1612887e54a5bd29a0

gitblog_01082的博客 15

Yii 2 DAO 数据库访问对象深度指南:连接管理、SQL 执行、事务控制与读写分离

Yii 2 的 DAO(Database Access Objects,数据库访问对象)是构建在 PHP PDO 之上、面向对象的关系型数据库访问层,也是查询构建器(Query Builder)与 Active Record 的底层基石。本文以 [docs/guide-ru/db-dao.md](https://link.gitcode.com/i/713b1c0322b59d8ff3cb2566

gitblog_00904的博客 7

精通 Yii(一)

Yii 框架 2(Yii2)是流行的 Yii 框架的继任者。像它的继任者一样,Yii2 是一个开源、高性能的快速开发框架,旨在创建现代、可扩展和性能卓越的 Web 应用程序和 API。本书旨在为没有接触过 Yii 和 Yii2 的开发者以及希望成为 Yii2 专家的 Yii 框架开发者提供指导,这本书将成为您成为 Yii 大师的指南。从初始化和配置到调试和部署,这本书将成为您掌握这个强大框架所有方面的指南。第一章,Composer、配置、类和路径别名,涵盖了 Yii2 应用程序的基础知识。在本章中,您将学习

龙哥盟 961

YII2.0的DAO/ActiveRecord是干什么的?是如何工作的?底层原理是什么?

而ActiveRecord则是基于DAO之上的一种更高级的数据库访问方式,它使用了一些面向对象的思想,将每一条数据库记录映射为一个对象,可以通过对象属性的方式来访问数据库字段,从而更加方便地进行数据库操作。ActiveRecord基于DAO之上,提供了更加便捷的面向对象的API,同时也支持一些高级的数据库操作,是Yii2.0中比较常用的数据库访问方式之一。访问数据:通过查询对象得到的一组记录都是模型对象的数组,我们可以通过对象属性的方式来访问每一条记录的具体字段。,并且定义好与数据库字段对应的属性。

长风破浪会有时的博客 358

Yii 2 Active Record 完全指南:面向对象的数据库访问、关系映射与生命周期管理

本文是 Yii 2 框架数据库组件([`framework/db`](https://link.gitcode.com/i/3a70aab4e05ad7548dd06a6a0e802c0b) 目录)中 **Active Record(AR)** 的权威实战指南。Active Record 为数据库表提供面向对象的访问接口:一个 AR 类对应一张数据库表,一个 AR 实例对应表中的一行,实例的*属性

gitblog_00978的博客 71

Yii2 查询构建器(Query Builder)完全指南:以 `yii\db\Query` 编程式构建安全、跨数据库的 SQL

本文基于 [docs/guide-fr/db-query-builder.md](https://link.gitcode.com/i/dac53bac4617510b55c12ca991506e99) 官方指南,系统讲解 Yii 2 查询构建器的完整用法:如何在 [DAO 数据库访问对象](https://link.gitcode.com/i/7b43cb698a0f9ad92c89684ad4

gitblog_00551的博客 92

Yii2 ActiveRecord查询初探

梳理一下Yii2中ActiveRecord一次查询的大致流程,理解如下几个问题: (1)ActiveRecord与ActiveQuery何时产生联系; (2)ActiveQuery怎样与数据库连接Connection产生关系; (3)ActiveRecord查询为何能返回ActiveRecord对象; (4)join(),joinWith()与with()有什么关系与区别; (5)Act...

weixin_33940102的博客 514

yii2学习笔记

之前看过Yii2框架,也在其他框架实现其Gii手脚架功能,现在开始使用Yii做项目,顺便记录一下学习笔记 先推荐一个网址Yii2速查表(中文版)http://nai8.me/tool-sc.html Yii和Laravel类似,都有一个全局的app实例化对象,下面先来看看Yii::app() Yii::app() 是一个实例化的对象,是我们在当前框架里边可以直接操作的对象, 我们可以把这个对象...

cxs812760493的博客 119

Yii2中的Active Record模式是什么?如何使用它进行数据库操作?

首先,你需要为每一个数据库表定义一个Active Record类。这个类通常继承自Yii2的类,并且类名通常和数据库表名一样(只是首字母大写,并且加上“类”字)。所以,Yii2中的Active Record模式就是一种把数据库表变成可以编程操作的对象的方法。通过Active Record类,你可以很方便地查询、插入、更新和删除数据库表里的数据。

长风破浪会有时的博客 797

yii2的DAO/ActiveRecord是干什么的?

Yii2 是一个 PHP 框架,它提供了很多工具和组件来帮助开发者更快地构建 Web 应用程序。在 Yii2 中,DAO(数据访问对象)和 ActiveRecord 是两种处理数据库操作的方法。

长风破浪会有时的博客 162
上一篇: Zend Framework2 - Sql Select with OR and AND 用法
下一篇: Yii2 - 应用结构 - 创建模块Modules
xmlife
博客等级 码龄19年 89粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值