PHP manual-mysqli-connections-翻译
MySQL
服务器支持使用不同的传输层进行连接。 连接可以使用TCP / IP
,Unix
域套接字或Windows
命名管道。
主机名localhost
具有特殊的含义。它与Unix
域套接字绑定,所以不能使用主机名localhost
打开TCP / IP
连接,要想打开TCP/IP
的链接,只能使用127.0.0.1
.
Example #1 localhost
的特殊含义示例
1 |
<?php |
以上例程会输出:
1 |
Localhost via UNIX socket |
默认的连接参数
根据所使用的连接方法,可以省略各种参数。 如果未提供参数,扩展会尝试使用在PHP
配置文件中设置的默认值.
Example #2 设置默认值
1 |
mysqli.default_host=192.168.2.27 |
然后将生成的参数值传递给扩展使用的客户端库。 如果客户端库检测到空或未设置参数,则它可能默认使用库内置值。
内置连接库默认值
如果主机值未设置或为空,则客户端库将默认为 大专栏 PHP manual-mysqli-connections-翻译localhost
上的Unix
套接字连接。 如果套接字未设置或为空,并且请求了Unix
套接字连接,则尝试连接到/tmp/mysql.sock
上的默认套接字。
在Windows
系统上,主机名被客户端库解释为尝试打开基于Windows
命名管道的连接。 在这种情况下,套接字参数被解释为管道名称。 如果参数没有给定或空,则套接字(管道名称)默认为\.pipeMySQL
。
如果基于Windows
命名管道的连接或者基于Unix
域套接字的连接都没有建立,并且端口参数值也未设置,则库将默认使用端口3306。
mysqlnd
库和MySQL Client Library(libmysqlclient)
实现了相同的逻辑来确定默认值。
连接选项
连接选项可用于在连接时执行的set init
命令,或用于请求使用某个字符集。 必须在建立网络连接之前,设置连接选项。
要设置连接选项,连接操作必须分三步执行:使用mysqli_init()
创建一个连接句柄,使用mysqli_options()
设置所请求的选项,并建立与mysqli_real_connect()
的网络连接。
连接池
mysqli
扩展支持持久数据库连接,这是一种特殊的池化连接。 默认情况下,脚本打开的每个数据库连接都由用户在运行时显式关闭或在脚本结束时自动释放。 持久连接不是。 相反,连接会被放入一个池中,如果之后有使用相同的用户名,密码,套接字,端口和默认数据库连接到同一台服务器的情况,该连接就会被使用。 此种方法减少了连接的开销。
每个PHP
进程都使用自己的mysqli
连接池。 根据Web
服务器部署模型,PHP
进程可能会提供一个或多个请求。 因此,连接池中的连接可能会在之后被一个或多个脚本使用。
持久化连接
如果连接池中没有符合当前需要的连接,则mysqli
将打开一个新的连接。 可以使用PHP
指令mysqli.allow_persistent
来启用和禁用持久连接功能。 脚本打开的连接总数可以通过mysqli.max_links
进行限制。 每个PHP
进程的持久连接的最大数量可以通过mysqli.max_persistent
进行限制。 请注意,Web
服务器可能会产生许多PHP
进程。
持久连接的一个常见的抱怨是,它们的状态在重新使用之前不被重置。 例如,打开和未完成的事务不会自动回滚。 而且,将连接进入池并重新使用之间发生的授权更改也没有反映出来。 这可能被视为不必要的副作用。 相反,持久的名字可能被理解为是国家坚持的承诺(这一句不知道怎么翻了。没看懂)。
mysqli
扩展同时支持对持久连接的解释:状态持续,或在重新使用前重置状态。 默认值是重置。 在持续连接被重用之前,mysqli
扩展隐式调用mysqli_change_user()
来重置状态。 持久连接对用户来说似乎刚刚打开。 之前的使用并不会影响当前。
mysqli_change_user()
函数是一个昂贵的操作。 为获得最佳性能,用户可能希望对MYSQLI_NO_CHANGE_USER_ON_PCONNECT
进行设置之后重新编译扩展。
用户可以选择提升安全性或者性能。 两者都是有效的优化目标。 为了易于使用,牺牲性能,而将安全性设为默认。
最新文章
- 集群 &; 负载均衡
- nginx的部署与发布
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- vim 上下左右变成ABCD 解决办法
- Java HashCode方法
- JQuery里属性赋值,取值prop()和attr()方法?
- Taglib、EL、OGNL
- VM 映像
- linux下源码编译安装mysql
- jquery按钮倒计时
- Aop实现SqlSugar自动事务
- Perl IO:操作系统层次的IO
- JS this用法详解
- Oracle简单查询实例
- UVA11491-Erasing ans Winning(贪心)
- 杭电多校第四场 E Matrix from Arrays
- SystemView SEGGER FreeRTOS 移植和使用
- UOJ#424 【集训队作业2018】count
- gf框架之grpool - 高性能的goroutine池
- sqlite学习笔记1:编译数据库
热门文章
- 对《The future of ReactiveCocoa》的一些思考
- c语言中,为什么以下程序直接按”Enter“也就是回车程序不结束?
- 新服务器搭建-总结: 下载nginx,jdk8,docker-compose编排(安装mysql,redis) 附安装
- Kruskal算法详解
- Java--类以及对象
- Survey sampling
- 分类算法之KNN分类
- linux上部署jenkins
- pycharm2018后版本执行Flask app.run()深坑
- scala编程(四)——类和对象