【问题标题】:How to get rid off Mysql has gone away error permanently如何摆脱Mysql已经永久消失的错误
【发布时间】:2014-05-26 10:18:10
【问题描述】:

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

过去我开发了一个系统,用户可以在其中导入包含记录的 csv。然后将这些行通过 while 循环导入数据库。它在 mysql_query 上完美运行。但是在 PDO 上,每当我尝试导入超过 3k 行时,它总是会给出错误 Mysql has gone away 并且进程在两者之间中断。

这是一个真正的问题,因为我的文件包含超过 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_

谢谢。

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    您应该使用 mysql data infile 从 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_name 的表中。它写道,这些字段以逗号(普通的 CSV 内容)终止,并且每个字段都用双引号括起来 - 并且这些行使用返回提要和新行作为中断。它还说忽略第一行(其中可能包含标题)并从那里开始。

    【讨论】:

    • 不幸的是管理员不是技术人员,他想通过前端管理面板导入 csv。这就是我创建界面的原因。
    • @AhmarAli 只需将文件上传到数据库服务器并运行命令即可。您仍然可以使用前端管理面板。
    • 管理员想自己导入 csv,我怎样才能让他通过前端使用加载数据 infile 来做到这一点?
    • @AhmarAli 将文件从用户上传到服务器上的某个位置,对该文件使用load data 命令,等到它完成,然后在同一个脚本中删除所有文件。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多