2010-08-18 96 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