mysqli扩展和持久化连接
mysqli扩展的持久化连接在PHP5.3中被引入。支持已经存在于PDO MYSQL 和ext/mysql中。
持久化连接背后的思想是客户端进程和数据库之间的连接可以通过一个客户端进程来保持重用, 而不是多次的创建和销毁。
这降低了每次需要创建一个新连接的开销,未使用的连接被缓存起来并且准备随时被重用。
不像mysql扩展,mysqli没有提供一个特殊的方法用于打开持久化连接。需要打开一个持久化连接时,你必须在 连接时在主机名前增加p:。
使用持久化连接的问题在于它们可能在客户端处于不可预知的状态。比如,一个表锁可能在客户端意外终止之前被激活。
一个新的客户端进程重用这个持久化连接就会"按照原样"得到这个连接。这样,一个新的客户端进程 为了更好的使用持久化连接,就需要做任何可能的清理工作,
这样就增加了对程序员的负担。
mysqli扩展的持久化连接提供了内建的清理处理代码。mysqli 所做的清理工作包括:
回滚活动的事务 关闭并且删除临时表 对表解锁、 重置会话变量 关闭prepared语句(在PHP中经常发生) 关闭处理程序 释放通过GET_LOCK()获得的锁
这确保了从连接池返回的持久化连接在客户端进程使用它之前处于干净的状态。
mysqli扩展通过自动的调用C-API函数mysql_change_user() 来完成这个清理工作。
自动清理的特性有优点也有缺点。
优点是:程序员不再需要担心附加的清理代码,因为它们会自动调用。
缺点就是: 代码可能会潜在的慢一点,因为每次从连接池返回一个连接都需要执行这些清理代码。
这个自动清理的代码可以通过在编译php时定义MYSQLI_NO_CHANGE_USER_ON_PCONNECT 来关闭。
Note:
mysqli扩展在使用Mysql Native Driver或Mysql Client Library(libmysql)时都支持持久化连接。
mysqli扩展和持久化连接的更多相关文章
- PHP使用mysqli扩展连接MySQL数据库
这篇文章主要介绍了PHP使用mysqli扩展连接MySQL数据库,需要的朋友可以参考下 1.面向对象的使用方式 $db = new mysqli('localhost', 'root', '12345 ...
- PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- 使用PDO持久化连接
无论是何种编程语言,几乎都要经常与各种数据库打交道.不过,众所周知的是,在程序与数据库之间建立连接是一件比较耗费资源的事情,因此编程技术领域的许多专家.前辈们就设想并提出了各种解决方案,以减少不必要的 ...
- mysqli扩展库操作mysql数据库
配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...
- 使用php的mysqli扩展库操作mysql数据库
简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性 安全性 和 执行效率有所提高 ...
- mysqli扩展库应用---程序范例
通过mysqli扩展库对用户表user1进行增删改查操作,用户表user1结构如下: 1,建立数据库操作类库mysqliTool.class.php,代码如下: <?php class mysq ...
- php数据库编程---mysqli扩展库
1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...
- 安装php WampServer之后,运行的时候报错“phpMyAdmin - 错误 缺少 mysqli 扩展。请检查 PHP 配置。”
今天在安装了WampServer2.1a-x32之后,点击WampServer的图标启动WampServer,在电脑右下角就可以看到WampServer启动之后的图标,然后点击“Start All S ...
- php mysqli扩展库之预处理操作
分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据 ...
随机推荐
- ORACLE链接SQLSERVER数据库数据操作函数范例
ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...
- Elasticsearch-6.7.0系列(七)SpringCloud连接ES集群,使用ES用户名密码
pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件, 需要用不同的驱动程序来实现. 在64位的机 ...
- COCOeval接口使用
COCOeval类简介 class COCOeval: # Interface for evaluating detection on the Microsoft COCO dataset. # # ...
- 浅谈dubbo服务
Dubbo分布式服 推荐大家一个画图工具:https://www.processon.com/i/572d51efe4b0c3c74981ec14 1.Dubbo是一个分布式服务框架,致力于提供高性能 ...
- PHP 常用数据库操作
1.建立与数据库服务器的连接(前提数据库服务器必须打开) 第一个参数:本地地址 第二个参数:数据库账户 第三个参数:数据库密码 第四个参数:数据库名称 $connection = mysqli_con ...
- js中的call()、apply()、bind()
js中的一个核心概念就是对this的理解,关于this前面也有说过,不过在有些情况下,还是需要手动去改变this的指向,这里总结一下,js中关于this操作的三种方法 call() apply() b ...
- 快速为不同 Git 平台配置用户
在 ~ 目录下创建 config 文件可以为项目配置默认的用户信息,但如果希望经常切换,那么最好就是通过命令为项目单独设置用户. 我使用的 shell 是 zsh, 所以我在 ~/.zshrc 文件中 ...
- 【转】TI DSP C6657学习之——编译静态库.lib
熟悉C++开发的的小伙伴都知道,我们一般代码中往往要引入许多第三方编译好的库,有些是静态链接库static library, 有些是动态链接库dll.引入库的目的一是减少代码的编译时间,二是只提供函数 ...
- python协程详解,gevent asyncio
python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...