Php 如何摆脱Mysql已经永远消失的错误

Php 如何摆脱Mysql已经永远消失的错误,php,mysql,pdo,Php,Mysql,Pdo,我最近从mysql切换到PDO,这真的很痛苦。一切似乎都很复杂 在过去,我开发了一个系统,用户可以在其中导入包含记录的csv。然后通过while循环将这些行导入数据库。它在mysql\u查询上运行得非常好。但在PDO上,每当我尝试导入超过3k行时,它总是给出错误Mysql已经消失,并且进程在两者之间中断 这是一个真正的问题,因为我有一个包含超过600k行的文件。我在谷歌上搜索了很多,有很多不同的解决方案。我试过这些,但没有用。我已将永久连接设置为false。下面是连接MYSQL的代码: publ

我最近从mysql切换到PDO,这真的很痛苦。一切似乎都很复杂

在过去,我开发了一个系统,用户可以在其中导入包含记录的csv。然后通过while循环将这些行导入数据库。它在
mysql\u查询
上运行得非常好。但在PDO上,每当我尝试导入超过3k行时,它总是给出错误Mysql已经消失,并且进程在两者之间中断

这是一个真正的问题,因为我有一个包含超过600k行的文件。我在谷歌上搜索了很多,有很多不同的解决方案。我试过这些,但没有用。我已将永久连接设置为false。下面是连接MYSQL的代码:

public function __construct($driver_options=null) {

    try {
        parent::__construct('mysql:host='.Database::DB_HOST.';port='.Database::DB_PORT.';dbname='.Database::DB_NAME,
                            Database::DB_USER, Database::DB_PASS,$driver_options);
        $this->setAttribute(PDO::ATTR_TIMEOUT, 10000000000); // to show error
        $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // to show error
        $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // defend sql injection
        $this->setAttribute(PDO::ATTR_PERSISTENT, false);   // defend sql injection

    } catch(PDOException $e){                
        die('Uncaught exception: '. $e->getMessage());
    }
}
那么,这个问题有没有永久的解决办法?或者我应该切换回mysql吗

谢谢。

您应该使用从csv加载严重数据

它是超级快速的(与插入相比,非常愚蠢的超级快速)。语法使用简单,你可以用它做任何你想做的事情——如果你是从CSV加载,它肯定会做你想做的一切

一个简单的代码示例(摘自文档)如下所示:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

这会将data.txt文件加载到名为
tbl\u name
的表中。它写道,字段以逗号(普通CSV格式)结尾,每个字段都用双引号括起来,并且行使用返回提要和新行作为分隔符。它还说忽略第一行(其中可能有标题)并从那里开始。

不幸的是,管理员不是技术人员,他希望通过前端管理面板导入csv。这就是我创建接口的原因。@AhmarAli只需将文件上载到DB服务器并运行命令。您仍然可以使用前端管理面板。管理员希望自己导入csv,那么我如何允许他使用load data Infle通过前端进行导入?@AhmarAli将文件从用户上传到服务器上的某个位置,对该文件使用
load data
命令,等待完成,然后删除同一脚本中的所有文件。:)