php-mysql扩展的mysql
时间:2021-07-01 10:21:17
帮助过:8人阅读
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 今天我们来探讨一下php-mysql扩展的mysql_connect/mysql_pconnect比较 item mysql_connect mysql_pconnect 函数原型 resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入
今天我们来探讨一下php-mysql扩展的mysql_connect/mysql_pconnect比较
item |
mysql_connect |
mysql_pconnect |
函数原型 |
resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
第四个参数$newlink标记是否创建新的资源对象 |
resource mysql_pconnect($host_port, $user, $passwd, $client_flags); |
allow_persistent指令 |
设置此指令使得两个函数行为均和mysql_connect()一致 |
连接资源对象获取 |
- 对$host_port, $user, $passwd, $client_flags求哈希值
- 在普通资源列表(EG(regular_list))中查找连接对象(已找到并且没有设置$newlink强制创建新连接)
- 检查找到的对象是否资源类型
- 从查找到的对象中读取连接对象
- 将当前获取的连接对象设置为全局默认连接对象
- 增加连接对象的引用计数, 设置zval属性返回
|
- 对$host_port, $user, $passwd, $client_flags求哈希值
- 从持久化资源列表(EG(persist_list))中查找连接对象(没有找到)
- 检查max_links配置指令限制是否到达
- 检查max_persistent配置指令限制是否到达
- 分配连接对象(php_mysql_conn)空间
- 设置连接对象的基础属性
- 初始化驱动层连接对象(mysqlnd/libmysql两种方式)
- 设置连接超时时间
- 发起驱动层的真实连接请求
- 构造持久化列表元素对象, 将新连接对象设置到元素中
- 将连接对象更新到持久化列表中
- 更新(增加)num_persistent/num_links计数
- 注册资源类型返回值
- 将当前获取的连接设置为全局默认连接对象
|
- 对$host_port, $user, $passwd, $client_flags求哈希值
- 在普通资源列表(EG(regular_list))中查找连接对象(未找到或设置了$newlink强制创建新连接)
- 检查max_links配置指令限制
- 分配连接对象(php_mysql_conn)空间
- 设置连接对象基础属性
- 初始化驱动层连接对象(mysqlnd/libmysql)
- 设置连接超时时间
- 发起驱动层的真实连接
- 将连接对象注册为资源类型返回值
- 将连接对象更新到普通资源列表(EG(regualr_list))中
- 更新num_links计数
- 将当前获取的连接对象设置为全局默认连接对象
|
- 对$host_port, $user, $passwd, $client_flags求哈希值
- 从持久化资源列表中查找连接对象(已找到)
- 检查查找到的持久化资源的类型是否匹配
- 从持久化资源中读取连接对象
- 设置连接对象基本属性
- 检查服务端是否主动关闭
- 如果服务端主动关闭则进行重连
- 注册资源类型返回值
- 将当前获取的连接设置为全局默认连接对象
|
regular_list Vs. persistent_list |
- regular_list和persistent_list两者都是HashTable
- 两者都是执行全局环境executor_globals的成员
- 两者生命周期不同, regular_list在php_request_shutdown()时被释放, 也就是单个请求处理完成之后释放, 而persistent_list在php_module_shutdown()的时候调用zend_shutdown()释放, 也就是在整个进程完成执行时释放
|