php的mysql操作工具类pdo和mysqli

mysql、mysqli、PDO mysql是非持继连接函数而mysqli是永远连接函数。也就是说,mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销 有些朋友在编程的时候,mysqli是php5提供的新函数库,(i)表示改进,其执行速度更快.当然也更安全。// mysqli, object oriented way 对象。// mysqli, procedural way 过程。1.mysql与mysqli。 阅读详情

从php7开始mysql扩展库已经被全面移除,原因暂不清楚,官方推荐我们使用mysqli和pdo,这次就针对pdo和mysqli分享下我的两个工具类

1 PDO的mysql操作工具类

这种方式已经用的越来越多了,pdo使用面向对象的方式操作数据库,pdo是很多人都比较推荐的方式。

但需要注意的是:  主机地址最好写成IP地址,例如127.0.0.1而不是localhost,否则容易出现数据库或表 找不到的异常亦或者有的数据库或表可以操作但有的却不行,此情况在版本稍高的mysql上面容易出现

<?php
namespace core;
use \PDO,\PDOStatement,\PDOException;
class PDOUtil{
    
    private $pdo;
    private $fetchStyle;
    
    public function __construct($connectInfo=array(),$driver=array()){
        
        $connectInfo["host"]=$connectInfo["host"]??"127.0.0.1";
        $connectInfo["port"]=$connectInfo["port"]??"3306";
        $connectInfo["dbname"]=$connectInfo["dbname"]??"wxstudy";
        $connectInfo["user"]=$connectInfo["user"]??"root";
        $connectInfo["password"]=$connectInfo["password"]??"123456";
        
        $charset=$connectInfo["charset"]??"utf8";
        
        $driver[PDO::ATTR_ERRMODE]=$driver[PDO::ATTR_ERRMODE]??PDO::ERRMODE_EXCEPTION;
        
        $this->fetchStyle=$connectInfo["fetchStyle"]??PDO::FETCH_ASSOC;
        
        $dsn="mysql:host=".$connectInfo["host"].";dbname=".$connectInfo["dbname"].";port=".$connectInfo["port"];
        
        try {
            $this->pdo=new PDO($dsn,$connectInfo["user"],$connectInfo["password"],$driver);
        } catch (PDOException $e) {
            echo "数据库连接异常";
            echo "错误的文件:".$e->getFile()."</br>";
            echo "错误的文件行数:".$e->getLine()."</br>";
            echo "异常信息:".$e->getMessage()."</br>";
        }
       
        try {
            $this->pdo->exec("set names {$charset}");
        } catch (PDOException $e) {
            $this->printException($e);
        }
        
    }
   
    /**增删改通用方法
     * @param  $sql
     * @throws PDOException
     * @return number
     */
    public function pdo_exec($sql){
        try {
            $result=$this->pdo->exec($sql);
            if($result==0){
                throw new PDOException("操作失败,记录未被更改");
            }
        } catch (PDOException $e) {
            $this->printException($e);
        }
        return $result;
    }
    /**查询
     * @param $sql
     * @param boolean $isOnly
     * @return mixed|array
     */
    public function pdo_query($sql,$isOnly=true){
        try {
            $stmt=$this->pdo->query($sql);
            $stmt->setFetchMode($this->fetchStyle);
            if($isOnly){
                return $stmt->fetch();
            }else{
                return $stmt->fetchAll();
            }
        } catch (PDOException $e) {
            $this->printException($e);
        }
        
        
    }
    
    private function printException($e){
        echo "SQL执行错误";
        echo "错误的文件:".$e->getFile()."</br>";
        echo "错误的文件行:".$e->getLine()."</br>";
        echo "异常信息:".$e->getMessage()."</br>";
    }
}

?>

这里使用构造方法初始化数据的连接、认证、设置字符集编码,从一定程度上也对PDO的异常机制做了处理,使用也比较简单

2  mysqli 工具类

也还不错的一个扩展,提供了面向对象和 面向过程两种方式以供使用,算是中规中矩但也 与时俱进

<?php
class DBUtil{
    
    private $port;
    private $userName;
    private $password;
    private $host;
    private $charset;
    private $dbName;
    
    public $recordCount;
    public $affectedRows;
    
    private $connection;
    
    public function __construct($connectInfo=array()){
        $this->port=$connectInfo["port"]??"3306";
        $this->userName=$connectInfo["userName"]??"root";
        $this->password=$connectInfo["password"]??"123456";
        $this->host=$connectInfo["host"]??"localhost";
        $this->charset=$connectInfo["charset"]??"utf8";
        $this->dbName=$connectInfo["dbName"]??"wxstudy";
        
        $this->connect();
        $this->setCharset();
    }
    
    private function connect(){
        $this->connection=new mysqli($this->host,$this->userName,$this->password,$this->dbName,$this->port);
        if( $this->connection->connect_error){
            die("数据库连接失败:". $this->connection->connect_error);
        }
    }
    
    //设置编码
    private function setCharset(){
        $sql="set names {$this->charset}";
        $res=$this->connection->query($sql);
        if(!$res){
            die("SQL执行出错:". $this->connection->error);
        }
       
    }
    
    /** 增删改统一方法
     * @param $sql
     * @return mysqli_result|boolean
     */
    public function exec($sql){
        $res=$this->connection->query($sql);
        if(!$res){
            die("SQL执行出错:". $this->connection->error);
        }
        $this->affectedRows=$this->connection->affected_rows;
        return $res;
    }
    /**查询
     * @param  $sql
     * @param boolean $isAll
     * @return mixed|array
     */
    public function query($sql,$isAll=false){
        $res=$this->connection->query($sql);
        if(!$res){
            die("SQL执行出错:". $this->connection->error);
        }
        $this->recordCount=$res->num_rows;
        if($isAll){
            //查询多条
           return  $res->fetch_all(MYSQLI_ASSOC);
        }else{
            return  $res->fetch_assoc();
        }
    }
    
    /**
     * 关闭数据库连接
     */
    public function close(){
        
        if($this->connection){
            
            $this->connection->close();
          
        }
       
    }
    
    /**
     *获取insert后的主键ID
     */
    public function lastInsertId(){
        return $this->connection->insert_id;
    }
}
?>

如果 使用mysqli扩展建议使用后关闭数据库连接,避免资源浪费

PHP自定义MySQL类实战:深入数据库操作 构建一个强大的自定义MySQL类可以大大提高代码的可重用性、可维护性以及开发效率。本章节将深入探讨自定义MySQL类的设计思想、架构以及如何实现关键功能细节。开发过程中,数据库操作是不可或缺的一部分。随着项目规模的扩大,直接在业务逻辑中编写SQL语句会使得代码变得冗长且难以维护。因此,构建一个自定义的MySQL类来管理数据库操作,可以将数据库逻辑与业务逻辑分离,提升代码的模块化水平。这种设计模式不仅可以提高代码的可重用性,还能够使得数据库操作更加集中和规范化。 阅读详情

相关推荐

PHP MySQL连接工具类的实现与应用.zip

mysqli是PHP中的一个扩展,用于替代老旧的mysql扩展,它支持面向对象和过程式两种风格的编程,并提供预处理语句和存储过程等增强功能。mysqli的优势在于其提供了一个面向对象的接口,支持多数据库连接以及性能优化,适合于需要执行复杂查询和批量数据处理的场景。当需要进行高性能的数据库操作时,如网站的后台管理、大型在线交易平台,mysqli是一个理想的选择。它还支持从多线程的Web服务器,如Apache的mod_php,或单独运行的PHP解释器执行。

weixin_32312889的博客 609

php之mysqli通用操作类(基本体)

<?php class sqltools { private $mysqli; //构造函数初始化连接 function __construct($local, $user, $pwd, $dbs) { $this->mysqli = new mysqli($local, $user, $pwd, $dbs); $this->m

打造核心知识库 3752

php-mysql工具类

php mysql工具类,通过单例模式实现!

php连接mysql代码+类_php连接mysql操作类

/** 名称: 数据库连接类* 介绍: 适用于各种数据库链接*/class mysql {private $_link;public function __construct($dbhost='localhost',$dbuser='root',$dbpassword='',$dbname='taojindidai',$charset='gbk') {$this->_link = mysql...

weixin_39960145的博客 151

php版的PDO数据库操作类(仅适用Mysql).zip

一个php版的PDO数据库操作类(仅适用Mysql) * 参数说明  * int $debug 是否开启调试,开启则输出sql语句  * 0 不开启  * 1 开启  * 2 开启并终止程序  * int $mode 返回类型  * 0 返回多条记录  * 1 返回单条记录  * 2 返回行数  * string/array $table 数据库表,两种传值模式  * 普通模式:  * 'tb_member, tb_money'  * 数组模式:  * array('tb_member', 'tb_money')  * string/array $fields 需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式  * 普通模式:  * 'username, password'  * 数组模式:  * array('username', 'password')  * string/array $sqlwhere 查询条件,允许为空,两种传值模式  * 普通模式:  * 'and type = 1 and username like "%os%"'  * 数组模式:  * array('type = 1', 'username like "%os%"')  * string $orderby 排序,默认为id倒序 

php实现PDO的mysql数据库操作类.zip

讲述了PHP实现PDO的mysql数据库操作类,dbconfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等。 dbtemplate类集合了对数据库的访问操作,主要有以下几个操作: 1. queryrows:返回多行记录 2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfordouble:查询单字段,返回浮点数(double) 6. queryforobject:查询单字段,返回对象,实际类型有数据库决定 7. update : 执行一条更新语句. insert / upadate / delete

php mysql工具类_PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】

本文实例讲述了PHP基于MySQLI函数封装的数据库连接工具类。分享给大家供大家参考,具体如下:mysql.class.php:class mysql{private $mysqli;private $result;/*** 数据库连接* @param $config 配置数组*/public function connect($config){$host = $config['host']; ...

weixin_35500243的博客 181

php封装的pdo数据库操作工具类与用法示例

本文实例讲述了php封装的pdo数据库操作工具类与用法。分享给大家供大家参考,具体如下: <?php header(Content-Type:text/html;charset=utf-8); class PdoMysql{ public static $config = array();//设置连接参数,配置信息 public static $link = null;//保存连接标识符 public static $pconnect = false;//是否开启长连接 public static $dbVersion = null;//保存数据库版本 public

mysqli工具类

<?php /* * mysqli工具类 */ class Mysqlis{ private $mysqli = ''; private $result = ''; private $address = 'localhost'; private $user = 'root'; private $password = 'root'; private $database = 'test'; private $port = '3306'; public function __co

u012816216的博客 198

PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】

主要介绍了PHP基于MySQLI函数封装的数据库连接工具类,结合实例形式分析了php封装mysqli函数实现的数据库操作类定义及连接、增删改查数据库等基本操作用法,需要的朋友可以参考下

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5242

php连接mysql面向对象_php下操作mysql详解之初级!(面向对象,面向过程)

mysql> create table user(-> id int primary key auto_increment,-> name varchar(32) not null,-> password varchar(64) not null,-> email varchar(128) not null,-> age tinyint unsigned not...

weixin_42106299的博客 416

Minitab实战:用Weibull分布预测产品寿命的5个关键参数(附真实案例)

本文通过一个真实的电容器老化测试案例,详细介绍了如何运用Minitab软件进行Weibull分布分析,以预测产品寿命。文章深入解读了形状参数β、尺度参数η等五个关键参数的工程意义与商业价值,指导工程师从失效数据中提取洞察,并将其应用于可靠性评估、保修策略制定及成本预估等实际业务决策。

weixin_29231263的博客 522

php数据库编程—mysql

基本概念 php有三种方式来操作mysql数据库 mysql扩展库 mysqli扩展库 pdo mysql扩展库和mysql数据库的区别 mysql数据库是用来存放数据的 mysql扩展库是一堆函数,是php设计者提供给程序员用于完成对mysql数据库的各种操作 (CRUD) mysql数据库的三层结构 快速入门案例 首先要在php.ini中启动mysql扩展库,通过phpinfo()函数可以查看php支持哪些扩展库 编写一个程序,这个程序从 user 表中读取数据并打印在网页中 ...

沉梦昂志 474

[CTFSHOW]JWT

文章目录前言JWT简介CTFSHOW Web345CTFSHOW Web346前置知识开始做题CTFSHOW Web347CTFSHOW Web348CTFSHOW Web349CTFSHOW Web350前置知识利用WP如何防御 前言 有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着 JWT简介 可以看看我的Github总结给自己看的,Y4tacker CTFSHOW Web345 首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生 where is

Y4tacker的博客 6045

干掉百度Apollo的安装!(Apollo10.0的源码安装)

1、在Apollo10.0的安装手册中,没有再详细给出源码安装的步骤,官方更推荐的是包管理安装,但实际上Apollo10.0仍然是可以进行源码安装的。2、使用源码安装Apollo10.0,比Apollo9.0的源码安装问题要少,整个安装过程更顺畅。3、从Apollo 10.0开始,源码安装和包管理安装采用同一套编译工具,也就是aem。之前只有在进行包管理安装的时候我们才需要安装aem,现在进行源码安装也需要安装aem。

qq_40033030的博客 893

简要谈谈php中mysql,mysqli,mysqlnd,pdo到底是什么.

名词解释:最开始的初学者,往往搞不清mysqli,mysqlnd,pdo到底是什么,下面先直接贴出最直观的名字吧。 MYSQL:This extension is deprecated as of PHP 5.5.0, and has been removed as of PHP 7.0.0. MYSQLI: MySQL Improved Extension MySQLND: My

感谢那一段回忆里的疯狂,在我们最无谓的岁月闪着光。 2万+

Docker Desktop 从 C 盘迁移到 D 盘的正确方法

本文介绍了三种将Docker数据目录从C盘迁移到D盘的方案。方案1针对WSL2用户,通过导出/导入虚拟磁盘实现迁移;方案2采用软链接方式,适合所有Docker模式;方案3则建议重装Docker到D盘。其中WSL2迁移方案(方案1)最为稳定可靠,推荐使用。文章详细说明了各方案的操作步骤及注意事项,并提供了迁移后常见问题的解决方法,帮助用户彻底解决Docker占用C盘空间的问题。

sg_knight的专栏 2178

深入浅出:PHP 数据库连接与操作(MySQLi 和 PDO)

MySQLi是 PHP 内置的一个扩展,专门用于与 MySQL 数据库进行交互。它提供了两种编程接口:面向过程的 API 和面向对象的 API。MySQLi 支持预处理语句、事务处理以及多种安全特性,使得它成为处理 MySQL 数据库的理想选择。PDO(PHP Data Objects)是一个轻量级的数据库抽象层,允许你在不同的数据库系统之间轻松切换,而不需要修改大量代码。PDO 支持多种数据库驱动,包括 MySQL、PostgreSQL、SQLite 等。

软件架构师笔记 1987

在 ABAP 环境中构建自定义健康监控指标:面向 SAP Cloud ALM 与 SAP Focused Run 的完整实践

本文介绍了在ABAP环境中开发自定义健康监控指标的方法。主要内容包括:1)标准监控指标的不足,如无法反映业务应用层面的问题;2)自定义监控架构,通过metric provider定义指标,由采集作业周期性获取数据并存储;3)核心实现技术,包括IF_GSM_API_PROVIDER接口和三个关键方法;4)指标从ABAP推送到SAP Cloud ALM/Focused Run的完整流程;5)开发实践步骤,从业务分析到具体实现。该方案可帮助团队监控业务关键指标,提升系统运维能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 263

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 82

简要谈谈php中mysql,mysqli,mysqlnd,pdo到底是什么

名词解释: 最开始的初学者,往往搞不清mysqli,mysqlnd,pdo到底是什么,下面先直接贴出最直观的名字吧。 MYSQL:This extension is deprecated as of PHP 5.5.0, and has been removed as of PHP 7.0.0. MYSQLI: MySQL Improved Extension MySQLND: MySQL Na...

m1ssyAn的博客 3397

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

PHP中的mysql、mysqli、pdo、pdo_mysql、mysqlnd是什么?

PHP中的mysql、mysqli、pdo、pdo_mysql、mysqlnd是什么? mysql 是PHP用来访问mysql服务的扩展,已经过时了。 mysqli 是PHP用来访问mysql服务的扩展。 pdo 是数据库抽象层,需要不同类型数据库的实现,比如pdo_mysql就实现了pdo抽象的的mysql驱动。 pdo_mysql 是PHP用来访问mysql服务的扩展。 mysqlnd 是...

March 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)

本文并非直译 用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢? 这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。 概述   PDO MySQLi Database support 12 different drivers MySQL onl

yipiankongbai的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

mysqli和mysql以及PDO的区别

php中MYSQL、MYSQLi和PDO的用法和区别:PHP的MySQL扩展(优缺点)设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程的接口;并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数 ;据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。PHP的mysqli扩展mysqli扩展,我...

青山依旧在 1273

NTscan扫描工具

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

上一篇: 将博客搬至优快云
下一篇: php7实现http和https请求web服务-通用工具类
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值