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进行设置之后重新编译扩展。
用户可以选择提升安全性或者性能。 两者都是有效的优化目标。 为了易于使用,牺牲性能,而将安全性设为默认。
PHP manual-mysqli-connections-翻译的更多相关文章
- Manual——Test (翻译1)
LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 1.17.3 Testing framework(测试框架) ns-3 包含一个仿真核心引擎. ...
- LTE Manual ——Logging(翻译)
LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 9 Logging ns-3 日志功能可以用于监测或调试仿真程序的进展.日志输出可以通过 ma ...
- Windows使用MySQL数据库管理系统中文乱码问题
声明:本文关于MySQL中文乱码问题的解决方案均基于Windows 10操作系统,如果是Linux系统会有较多不适用之处,请谨慎参考. 一.MySQL中文乱码情况 1. sqlDevelper远程登陆 ...
- gcc都做了什么优化
直接上程序: setjmp和longjmp是处理函数嵌套调用的,goto语句不能跨越函数,所以不选择goto. #include <setjmp.h> int setjmp(jmp_buf ...
- 【Android】给Android Studio设置代理
先打开我们的Android Studio,点击工具栏的file下的settings,如下图 之后再搜索框上面输入Proxy,然后按第四步提示点击,如下图 之后就进入了设置代理的界面了,如下图 默认情况 ...
- android studio设置代理更新
我们都知道Android Studio是基于IDEA开发的,而我们写的每一个程序又都是有Gradle构建的,Gradle的优点可以说是很多,被很多程序员夸得没边,但是它有一个特点还是值得我们注意的.我 ...
- 一文带你了解 Spring 5.0 WebFlux 应用场景
一.什么是 Spring WebFlux 下图截自 Spring Boot 官方网站: 结合上图,在了解 Spring WebFlux 之前,我们先来对比说说什么是 Spring MVC,这更有益我们 ...
- Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
目录 一.什么是 Spring WebFlux 二.WebFlux 的优势&提升性能? 三.WebFlux 应用场景 四.选 WebFlux 还是 Spring MVC? 五.异同点 六.简单 ...
- Android Studio设置代理,解决检查更新gradle信息的问题
Android Studio是基于JetBrains公司的IDEA开发的,Android Studio里的项目都是由Gradle构建的,Gradle集合了Ant和Maven的优点,又解决了他们的缺点, ...
- 【MVC】Spring WebFlux
一.什么是 Spring WebFlux 下图截自 Spring Boot 官方网站: 结合上图,在了解 Spring WebFlux 之前,我们先来对比说说什么是 Spring MVC,这更有益我们 ...
随机推荐
- ubuntu14.04安装32位库
sudo dpkg --add-architecture i386 sudo apt update
- MFC修改系统托盘的图标
最近开始学习MFC,发现程序在任务栏,窗口和exe都使用的默认图标,那么,我们想使用自己的图标该如何做? 第一种方法: 1.我们将自己要使用的icon的图标导入项目中. 资源视图-->xx.rc ...
- hibernate中session.flush()
flush()session flush在commit之前默认都会执行, 也可以手动执行,他主要做了两件事: 1) 清理缓存. 2) 执行SQL. flush: Session 按照缓存中对象属性变化 ...
- VSFTP服务搭建
title date tags layout CentOS6.5 Vsftp服务安装与配置 2018-09-04 Centos6.5服务器搭建 post 1.安装vsftp服务 [root@local ...
- drf中的请求模块和渲染模块
请求模块:request对象 APIView request.py # 在rest_framework.request.Request实例化方法中 self._request = request 将原 ...
- window下mysql安装步骤
1. 官网下载mysql zip包 2. 解压后再D:\database\mysql\mysql-5.7.26-winx64下添加my.ini文件,文件内容如下: [mysql]# 设置mysql客户 ...
- 部署企业本地yum源及源码包安装
YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...
- activity 和 fragment 传递信息
acitvity 传递信息到fragment 初始化fragment 时可以传递arguments 该参数类型时Bundle activity 会持有fragment引用 通过通过参数的set方法 ...
- QuickSort(快速排序)原理及C++代码实现
快速排序可以说是最重要的排序,其中延伸的思想和技巧非常值得我们学习. 快速排序也使用了分治的思想,原理如下: 分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r ...
- zabbix报错
zabbix报错 原文:https://www.cnblogs.com/dbslinux/p/9465803.html https://www.cnblogs.com/losbyday/catego ...