2010-08-18 99 views
0

在使用PHP导出CSV文件时,有一些记录不会包含在内。它似乎在转移时,即使仍有记录要输出,它也会停止。有什么问题?在PHP中导出CSV文件

+1

哇这是一个模糊的描述问题。您能否请...给我们一些您遇到的问题代码? – 2010-08-18 07:09:35

+1

请在允许我们理解您的问题的表单中编辑您的问题。 – Raz 2010-08-18 07:10:38

+0

此外,请添加一些代码以显示您如何执行此操作,并确保启用了错误报告。当我将数据库中的文件导出为.csv文件时,列出脚本给出的任何错误 – Gordon 2010-08-18 07:13:39

回答

0

我在将CSV内容导出到数据库时遇到了一些错误。 大部分问题是因为数据库在保存记录时失败。 例如您的数据是这样的:

"1;me;24" 
"2;you;" 
"3;they;26" 
"4;she;27" 
"5;it;28" 

如果你的数据库有约束的行不能为空,所以数据库将引发错误的PHP。并且在将所有记录记录到数据库之前,php将停止循环。

解决方案,您可以在您的代码中添加异常,当数据库无法插入数据库时​​,它将继续循环,直到它完成记录到您的数据库的csv。

<?php 

error_reporting(E_ERROR); 

class MySQLException extends Exception 
{ 
    public function __construct($message,$code=0){     
     parent::__construct($message,$code); 
    } 
} 

class Mysql 
{  
    private $_DB_HOST; 
    private $_DB_USERNAME; 
    private $_DB_PASSWORD; 
    private $_DB_NAME; 
    private $_DB_SELECT_STATE; 

    private $_CONNECTION; 

    public function __construct($host, $username, $password, $dbname) { 
     $this->_DB_HOST = $host; 
     $this->_DB_USERNAME = $username; 
     $this->_DB_PASSWORD = $password; 
     $this->_DB_NAME = $dbname; 

     $this->__connect(); 
     $this->__select_db(); 
    } 

    private function __connect() { 
     $this->_CONNECTION = mysql_connect($this->_DB_HOST, $this->_DB_USERNAME, $this->_DB_PASSWORD); 

     if(!$this->_CONNECTION) {    
      throw new MySQLException('Could Not Connect to database with given setting');    
     } 
    } 

    private function __select_db() { 
     $this->_DB_SELECT_STATE = mysql_select_db($this->_DB_NAME , $this->_CONNECTION); 

     if(!$this->_DB_SELECT_STATE) { 
      throw new MySQLException('Could Not select to database with given setting'); 
     } 
    } 

    public function query($query){ 
     if(($result = mysql_query($query, $this->_CONNECTION) )) { 
      return $result; 
     } else { 
      $command = explode(' ', trim($query)); 
      throw new MySQLException('Could not do' . $command . ' query'); 
     } 

    } 
} 


// connect to database 
$database = new Mysql("localhost", "username", "password", "test"); 

// example your csv file before parsed 
$csv = array("1;me;24", "2;you;", "3;they;26", "4;she;27", "5;it;28"); 

for($i = 0; $i < sizeof($csv); $i++){ 
    try{ 
     $row = explode(";", $csv[$i]);   
     $database->query("INSERT INTO testtable (id, name, age) VALUES (".$row[0].", '".$row[1]."', ".$row[2].")"); 
    } catch (MySQLException $e){ 
     echo 'We could not insert to the database <br>'; 
    } 
} 

,如果你不添加任何尝试捕捉,您的代码将在插入第二个查询

"1;me;24" 
"2;you;" 
"3;they;26" 
"4;she;27" 
"5;it;28" 

停下,但该代码保持循环,直到结束解析,如果你捕获该异常。

+0

“当数据库无法插入数据库时​​,您可以在代码中添加异常” - 您是什么意思?在我的插入sql语句中添加一些东西?你能进一步解释吗?谢谢! – anonymous123 2010-08-20 07:50:26

+0

好吧,我将添加示例实现 – 2010-08-20 17:56:08

+0

感谢您的回复和示例,Swing Magic。 我不认为这个问题与插入记录到数据库有关,因为当我导出CSV文件时,我不做插入查询,我只是使用select查询来检索存储在数据库。顺便说一下,在导出CSV文件时,有一些datapickers允许用户选择日期范围。这个问题会在这里发生,但是,如果我只选择一个日期,它会正常工作。只有当我选择日期范围时才会出现问题。 – anonymous123 2010-08-23 02:27:11