热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

yafmysqlpdo封装_PDO操作数据库

#PDO操作数据库***Yaf框架(3.0.5版本)目前并没有提供数据库ORM类,据鸟哥的博客来说,以后或许会提供。使用了ORM类为团队带来的便捷和规范

# PDO 操作数据库

***

Yaf 框架(3.0.5版本)目前并没有提供数据库 ORM 类,据鸟哥的博客来说,以后或许会提供。使用了 ORM 类为团队带来的便捷和规范,但是带来了性能的下降。直接使用 PDO 保证性能,又存在规范不足让程序维护成本上升或安全上的风险。这就要各位读者自行取舍。

> ORM 即 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。[来自维基百科]

> 笔者注:简单来说 ThinkPHP5 的 Db 方法或者模型,ThinkPHP3 的 M方法和 D方法,Laravel 的 Eloquent 都属于 ORM 类范畴

接下来我们使用单例模式创建 PDO 类

### 1. 创建配置文件选项

打开`conf/application.ini`文件增加数据库配置

~~~

; 数据库配置

resources.database.master.host = "127.0.0.1"

resources.database.master.port = 3306

resources.database.master.dbname = "eye"

resources.database.master.username = "root"

resources.database.master.password = ""

~~~

### 2. 创建 Database 类(单例)

本类并没有添加查询,添加,修改,删除等方法,而是将所有操作重载给 PDO 类实例,导致有些 PDO 的方法在编辑器中没有代码提醒,所以需要使用 `phpDocumentor` 注释语法来开启代码提醒。下方代码前两行注释就是我为 Database 类编写的`query()`操作和`fetchAll()`操作的代码提醒

~~~php

/**

* 方法重载函数,用于编辑器代码提醒

* @method Database query($statement, $mode = PDO::ATTR_DEFAULT_FETCH_MODE, $arg3 = null, array $ctorargs = array())

* @method Database fetchAll($fetch_style = null, $fetch_argument = null, array $ctor_args = array())

*/

class Database

{

// 类实例

private static $instance = null;

// 连接实例

private static $link = null;

// 配置文件

private static $config = [];

/**

* 构造函数

*/

private function __construct()

{

self::$config = Yaf_Registry::get('config')->resources->database->master;

self::$link = new PDO("mysql:host=" . self::$config['host'] . ";dbname=" . self::$config['dbname'], self::$config['username'], self::$config['password'], [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'']);

}

/**

* 获取实例

* @return Database

*/

public static function getInstance()

{

return self::$instance ?: (self::$instance = new self());

}

/**

* 魔术方法,方法重载

* @param $name

* @param $arguments

* @return mixed

*/

function __call($name, $arguments)

{

return self::$link->$name($arguments[0]);

}

/**

* 禁止克隆

*/

private function __clone()

{

}

/**

* 反序列化魔术方法

*/

public function __wakeup()

{

self::$instance = $this;

}

/**

* 析构函数

* @description 销毁实例

*/

public function __destruct()

{

list(self::$instance, self::$config) = [null, []];

}

}

~~~

### 3. 自动加载 Database 类

打开`application/Bootstrap.php`文件,在`_initAutoload()`方法下加入导入类代码,实现自动导入`Database`类

~~~php

public function _initAutoload()

{

// 注册 Composer

Yaf_Loader::import(APPLICATION_PATH . "/vendor/autoload.php");

// 注册数据库

Yaf_Loader::import(APPLICATION_PATH . "/application/library/Database.php");

}

~~~

除了可以使用 Yaf 自带的 `Yaf_Loader` 类来引入 php 库文件以外,也可以使用 `include()`,`require()`等方式引入

### 4. 开始使用

现在就可以在项目中,使用`Database::getInstance()`来 PDO 操作了

~~~php

$rows = Database::getInstance()->query('SELECT `id`,`user_name`,`password` FROM users ORDER BY `id` DESC ;');

ldd($rows->fetchAll(PDO::FETCH_ASSOC));

~~~



推荐阅读
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL下载与安装指南:详细记录常见问题及解决方法
    MySQL下载与安装指南:详细记录常见问题及解决方法 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 如何在Sublime Text 3中将文件编码格式设置为UTF-8
    本文详细介绍了在Sublime Text 3中将文件编码格式设置为UTF-8的具体步骤。通过这些方法,用户可以轻松实现文件编码的转换,确保文本在不同系统和平台上的兼容性和一致性。对于经常需要处理多语言文本的开发者来说,这一技巧尤为实用。希望本文能为读者提供有价值的参考。 ... [详细]
author-avatar
亚瑟女皇韩版欧美风情女装旗舰店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有