如何摆脱Mysql永远消失了错误

时间:2014-05-26 10:18:10

标签: php mysql pdo

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

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

这是一个真正的问题,因为我的文件包含超过600k行。我用Google搜索了很多,并且有很多不同的解决方案来解决问题。我试过这些但无济于事。我已将持久连接设置为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_

感谢。

1 个答案:

答案 0 :(得分:0)

您应该使用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东西)终止,每个字段都用双引号括起来 - 并且这些行使用返回Feed和新行作为中断。它还说要忽略第一行(可能在其中有标题)并从那里开始。