繁体   English   中英

Pdo Mysql:警告:数据包乱序

[英]Pdo Mysql : Warning: Packets out of order

当一个接一个地运行两个PDO查询时,我收到错误“Uncaught Exception Warning:Packets乱序。预期1收到166.数据包大小= 52”。

$dbh = new \PDO('mysql:host=' . $dbHost . ';dbname=' . $dbName, $dbUser, $dbPass, array(
            \PDO::MYSQL_ATTR_LOCAL_INFILE => true
        ));

$sql = <<<eof
            LOAD DATA LOCAL INFILE '$csv'
             INTO TABLE $table
             FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            ($columns);
            ALTER TABLE $table ADD COLUMN disabled INT DEFAULT 0
eof;
$dbh->query($sql);
$sql = 'SELECT COUNT(id) FROM '.$table.' WHERE myfield IS NULL';
$dbh->query($sql);

我正在尝试做的事情:在将大型CSV文件(大约30 MB和40k行)导入数据库之后,我想计算一个字段中有多少行为空,以便在以后的查询中填充它们。

我注意到如果我注释掉第二个查询,我可以运行第一个查询,然后如果我注释掉第一个查询,我就可以运行第二个查询。 如果我尝试一个接一个地运行它们,它就失败了。 我尝试将内存包从8M提升到20M,并设置$ dbh-> setAttribute(\\ PDO :: ATTR_EMULATE_PREPARES,true); 没有成功。 类似的代码早先使用较小的数据集。 任何指针都非常欢迎!

好吧,实际上在上面的eof语句中我放了多个查询。 在内联加载数据后,我添加了一些alter table查询。 似乎pdo无法在一个eof块中处理多个查询。 所以我尝试在自己的请求中分离每个查询,然后它工作。

您可以在获取所有内容之前添加此内容:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM