首页 > 数据库 >php多进程引发mysql查询问题

php多进程引发mysql查询问题

时间:2024-03-15 13:22:26浏览次数:29  
标签:PHP prepare 查询 PDO mysql php 连接

1、报错:Packets out of order. Expected 1 received 56. Packet size=3159346

开始配置my.cnf 的 max_allowed_packet=2G 可是没什么卵用

原因:个人判断是因在laravel mysql的连接是随着php销毁而销毁;所以会保持数据库的连接会话能重复使用

所以要配置database.php   配置文件options 

'options' => [
\PDO::ATTR_PERSISTENT => false, /*使用pda连接会话持久化*/
]

注解:

建立PDO持久化连接只需要在PDO构造函数的第4个参数(该参数为可选参数,是一个包含多个驱动选项参数的数组)中设置键名PDO::ATTR_PERSISTENT的值为true即可。

使用new PDO()语句创建一个数据库连接,当连接数据库成功后,将会得到一个PDO类的实例,此连接在PDO对象的生存周期中保持活动。要想关闭连接,需要销毁对象以确保所有剩余到它的引用都被删除,可以赋一个NULL值给对象变量。如果不明确地这么做,PHP在脚本结束时会自动关闭连接。

创建的数据连接为PDO持久化连接时,该连接在使用完毕或者PHP脚本结束后并不会被关闭,而是被PHP缓存起来。当另一个使用相同凭证(主机、端口、数据库名、用户名、密码等信息完全一致)的PHP脚本请求建立连接时,PHP将直接返回之前被缓存起来的连接,从而达到连接重用。持久连接缓存可以避免每次访问数据库都要建立一个新连接的开销。

 

2、报错:Illuminate\Database\QueryException : Wrong COM_STMT_PREPARE response size. Received 1

个人判断是因为高并发下mysql不断向服务端预处理造成的问题

所以要配置database.php   配置文件options 

'options' => [
  \PDO::ATTR_EMULATE_PREPARES => true,
]

1、ATTR_EMULATE_PREPARES=true(默认)
含义:本地prepare
详细:prepare不发送,execute时发送完整的sql
优点:当代码里频繁prepare,prepare放在本地,减轻mysql服务器压力
缺点:sql注入需要自己防范
注意:会把数据库数据由int类型转成string,如果php跟object-c合作,可能有问题。需慎重!!!


2、ATTR_EMULATE_PREPARES=false
含义:服务端(mysql)prepare
详细:prepare时「query+占位符」发给服务端
优点:1、防sql注入;2、当代码里prepare少时性能更好
缺点:1、高并发,频繁prepare,会有性能问题;2、慢日志里是占位符

标签:PHP,prepare,查询,PDO,mysql,php,连接
From: https://www.cnblogs.com/guokefa/p/18075070

相关文章

  • mysql:导入数据
    第一步:导入向导第二部第二步:选择数据格式点击下一步下一步:选择要导入哪一个下一步:点击开始点击完成即可,点击sheet1,就有了......
  • 拯救php性能的神器webman-使用后台webman-admin
    在webman的插件市场里面发现了这个webman-admin安装的话很简单,就是在已经安装了webman的目录里面执行  composerrequire-Wwebman/admin 安装过程提示这些Usingversion^0.6.24forwebman/admin./composer.jsonhasbeenupdatedRunningcomposerupdatewebman/......
  • mysql语句
    1.获取表中全部字段selectGROUP_CONCAT(COLUMN_NAME)frominformation_schema.COLUMNSwheretable_name='表名'andtable_schema='库名';2.数据表字段总数SELECTcount(1)frominformation_schema.COLUMNSWHEREtable_schema='apollo'andtable_na......
  • MySQL-Utilities使用
    MySQLUtilities介绍MySQLUtilities提供一组命令行工具用于维护和管理MySQL服务器,包括:管理工具(克隆、复制、比较、差异、导出、导入)复制工具(安装、配置)一般工具(磁盘使用情况、冗余索引、搜索元数据)安装MySQL-Utilitieswgethttps://downloads.mysql.com/arch......
  • Jemter查询数据库
    1、导入mysql驱动在mysql官网下载mysql驱动https://www.mysql.com/;参考博客,https://blog.csdn.net/Li_Ya_Fei/article/details/104583417,将下载下来的jar包存放在apache-jmeter-5.3\lib\ext下后重启jemter。2、创建JDBCConnectionConfiguration  3、创建JDBCrequest......
  • Kibana导出查询结果
    查询Exchange服务器上的安全事件日志,通过攻击源客户端计算机名称,获取攻击源IP  Visualize-新建-Datatable-索引定义好过滤条件后,根据访问源IP进行分组,并统计访问次数,然后导出结果 定义好过滤条件后,导出被爆破的用户名,并统计次数,然后导出结果 通过直方图统计......
  • MySQL解决幻读(2)
    MySQL的默认隔离级别(REPEATABLE-READ)如何解决脏读和不可重复度脏读读取到未提交的数据不可重复度两次读取的数据不一致,侧重与数据的更新幻读两次读取的数据不一致,侧重数据的新增和删除解决根据当前读或MVCC来解决脏读和不可重复读的当前读:加锁,在读取时会将所有数据加......
  • php pdf转图片列表
    使用composerrequirespatie/pdf-to-image服务器需要安装ImageMagick,并且将/etc/ImageMagick-6/policy.xml找到pdf这一行,注释掉或者增加读、写、编译 <policydomain="coder"rights="read|write|decode"pattern="PDF"/>publicfunctionpdfToImage(RequestInterf......
  • NOT IN子查询中出现NULL值对结果的影响你注意到了吗
    前言开发人员写的SQL语句中经常会用到in,exists,notin,notexists这类子查询,通常,含in、exists的子查询称为半连接(semijoin),含notin、notexists的子查询被称之为反连接,经常会有技术人员来评论in与exists效率孰高孰低的问题,我在SQL优化工作中也经常对这类子查询做优化改写,比如半......
  • 图书推荐|MySQL 8.0从入门到实战
    MySQL数据库从入门到实战,全面掌握MySQL的使用技能和解决实际问题的能力!本书简介MySQL数据库是目前全球流行的数据库之一。《MySQL8.0从入门到实战》从入门到实战,系统全面、由浅入深地介绍MySQL数据库应用的各个方面。全书分为8个部分,共18章。第1部分(第1~3章)介绍MySQL的基......