Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO启动失败_Php_Mysql_Pdo - Fatal编程技术网

Php PDO启动失败

Php 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 这里怎么了 编辑:我的代码在循环中运行,

我的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

这里怎么了

编辑:我的代码在循环中运行,向表中插入总计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