Yii2 - 数据库访问对象

海上AI导航系统:技术架构与行业应用解析 计算机视觉与强化学习技术在海上导航系统中的应用正逐步改变传统航运业。通过多模态传感器融合技术,现代AI导航系统能够实现高精度的物体识别与实时路径规划,有效解决能见度依赖、决策延迟等核心痛点。以Orca AI的SeaPod系统为例,其结合了NVIDIA GeForce RTX 4070的边缘计算能力与多光谱协同识别技术,在恶劣环境下仍能保持稳定性能。这类系统不仅提升了航行安全性,还通过优化航线显著降低燃油消耗,在东京湾、马六甲海峡等繁忙水域展现出巨大价值。随着毫米波雷达融合方案的测试推进,未来海上导航将突破极 阅读详情

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

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();
}

 

SMPTE ST 2110 概论(三) SMPTE ST 2110 概论(三)ST 2110-30:未压缩的PCM音频流ST 2110-31:非PCM音频传输ST 2110-40:辅助数据传输结语 ST 2110-30:未压缩的PCM音频流 鉴于音频系统是广播系统中最复杂,也是最重要的一套系统,我们先来回顾一下广电音频系统的历史。 最老式的音频都是基于模拟信号的,具有有限的动态范围,并且用连续的电压变化来描述音频。再后来就基于数字信号(... 阅读详情

相关推荐

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1582

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

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

weixin_39624716的博客 584

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

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

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

长风破浪会有时的博客 952

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 153

GEE高阶应用——如何绘制2000-2022年土地利用变化轨迹时序图

土地利用变化是指在一定时间范围内,土地利用类型和结构发生的变化。时序变化是指这种变化随时间的推移而发生的序列变化。土地利用变化轨迹的时序变化具体介绍如下:首先,土地利用变化轨迹的时序变化体现在土地利用类型的演变上。在过去的几十年里,随着人口的增加、经济的发展和城市化的推进,土地利用类型发生了显著的变化。传统的农田逐渐减少,而城市、工业、交通、居住等用地的面积不断扩大。同时,随着环境保护意识的提高,生态保护用地、森林、湿地等绿色用地的面积也在增加。

此星光明博客 1113

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

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

Terry - 专注外贸B2C 3864

SEGGER Embedded Studio初体验

先楫HPM5E00EVK开发环境搭建

hywing's blog 1109

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

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

weixin_31881743的博客 269

【Segment Anything Model】三:SAM模型微调自定义数据集,更改混合提示方式:点,框,点框混合

1.微调SAM预备知识。

cvxiayixiao的博客 1万+

【YOLOv11】从零搭建基于YOLOv11深度学习算法的农作物虫害检测系统(附带环境搭建+完整代码+讲解)

《基于YOLOv11的农作物病虫害智能检测系统》项目摘要 本项目开发了一个基于YOLOv11深度学习算法的农作物病虫害检测系统,支持玉米、水稻、草莓和西红柿等四大类经济作物的30多种病虫害识别。系统采用多模态检测方式,支持图片、视频和实时摄像头输入,并集成了完整的Web应用框架。 技术架构上,系统以PyTorch实现YOLOv11算法为核心,结合Flask搭建深度学习服务,SpringBoot构建业务后端,Vue3+TypeScript开发前端界面,MySQL数据库存储检测数据。系统具备用户权限管理功能,支

AnChenliang_1002的博客 812

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

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

长风破浪会有时的博客 836

YOLOv8多传感器融合技术——摄像头阵列融合技术详解

本文详细介绍了基于YOLOv8的摄像头阵列融合技术,该技术通过多摄像头协同工作实现360度无死角环境感知。文章阐述了系统原理,包括全方位视野覆盖、冗余设计和深度感知等优势,并提供了完整的Python实现代码。关键技术涵盖多摄像头检测、立体匹配、3D投影和目标融合等模块,支持时间域融合提升稳定性。该系统可显著提高自动驾驶的环境感知能力,减少检测盲区,增强系统可靠性,是L4-L5级自动驾驶的关键技术之一。文章还展示了城市驾驶场景的实际应用,验证了该技术对复杂交通环境的适应能力。

u010117029的博客 213

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

gitblog_00026的博客 316

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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
上一篇: 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、付费专栏及课程。

余额充值