Php PDO启动失败
我的php错误日志中出现以下错误 PHP警告:发送查询数据包时出错。第87行的PID=29770 in/home/test/test.php 在php脚本的第87行,代码idPhp PDO启动失败,php,mysql,pdo,Php,Mysql,Pdo,我的php错误日志中出现以下错误 PHP警告:发送查询数据包时出错。第87行的PID=29770 in/home/test/test.php 在php脚本的第87行,代码id $DBH->beginTransaction(); 之后,当我提交时,我得到以下错误 异常“PDOException”,在/home/test/test.php:98中显示消息“没有活动事务” 我已经设置了max\u allowed\u数据包=512M,我的表是InnoDB 这里怎么了 编辑:我的代码在循环中运行,
$DBH->beginTransaction();
之后,当我提交时,我得到以下错误
异常“PDOException”,在/home/test/test.php:98中显示消息“没有活动事务”
我已经设置了max\u allowed\u数据包=512M
,我的表是InnoDB
这里怎么了
编辑:我的代码在循环中运行,向表中插入总计100000多条记录。我在每个事务中插入5000多条记录。
这是我的代码结构
beginTransaction
Multiple insert query for 5000 records
commit
在循环中运行以插入100000多条记录。有时脚本运行成功,有时失败
我在6-7个循环中得到这个错误。(插入30K到40K的记录) ,有可能连接到数据库不是持久的。这可能会导致事务在提交之前清除,从而导致错误
我宁愿发表评论,因为这本身不是一个“答案”,但不幸的是我没有必要的声誉。我在网上搜索了“发送查询包时出错”这句话。它能够打开以下链接: 这篇文章的作者也有类似的问题,他还尝试了“增加
max\u-allowed\u-packet
size”和增加超时时间,但没有成功。但似乎有效的方法是将工作分成小块
我们的新的较小的csv文件在MySQL内部成功更新,尽管我们仍然不知道是什么导致了最初的错误
我不清楚他们是在一个PHP进程的生命周期内处理了许多块,还是多次运行代码,但这个想法似乎是正确的;也许你可以试一试。另一种可能性是将数据写入CSV文件,然后使用MySQL
加载数据填充将其加载到数据库中(以下是示例)。
我用大小达250MB的CSV文件尝试了这个方法,效果非常好。在beginTransaction()
行之前会出现什么代码?请编辑以显示更多上下文。特别是,以前的查询可能没有获取所有行,或者其他情况可能会干扰$DBH
的连接状态。您想要运行的查询是什么样的?请给我们举个例子,或者告诉我们你正在做的操作的大小。我想发布真实的代码。对象$DBH
的状态很重要。查询本身可能很重要。听起来您正在丢失与mysql的客户端连接,可能是因为超时,但是如果在6-7次迭代后在insert循环中失败,那么在beginTransaction().PS报告错误是没有意义的,因为mysql被延迟了,如果您在事务中截断、更改或创建一个新表,您的交易将自动提交,交易将在没有警告的情况下结束,IIRC