在PHP中导出CSV文件

在PHP中导出CSV文件,php,csv,export,Php,Csv,Export,在使用PHP导出CSV文件时,有些记录将不包括在内。似乎在传输时,即使仍有记录要导出,它也会停止。有什么问题吗?我在将CSV内容导出到数据库时遇到了几个错误。 大多数问题是因为数据库在保存记录时失败。 例如,您有如下数据: "1;me;24" "2;you;" "3;they;26" "4;she;27" "5;it;28" 如果您的数据库具有约束,则行不能为null,因此数据库将向php抛出错误。php将在所有记录都记录到数据库之前停止循环 <?php error_repo

在使用PHP导出CSV文件时,有些记录将不包括在内。似乎在传输时,即使仍有记录要导出,它也会停止。有什么问题吗?

我在将CSV内容导出到数据库时遇到了几个错误。 大多数问题是因为数据库在保存记录时失败。 例如,您有如下数据:

 "1;me;24"
 "2;you;"
 "3;they;26"
 "4;she;27"
 "5;it;28"
如果您的数据库具有约束,则行不能为null,因此数据库将向php抛出错误。php将在所有记录都记录到数据库之前停止循环

<?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>';
    }
}

在解决方案中,您可以在代码中添加异常,当数据库无法插入到数据库中时,它将继续循环,直到将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>';
    }
}

但是如果捕获到异常,代码将一直循环到解析结束

哇,这是一个模糊描述的问题。你能不能。。。给我们一些您有问题的代码?请以允许我们理解您的问题的形式编辑您的问题。另外,请添加一些代码以显示您是如何执行的,并确保启用了错误报告功能。列出脚本给出的任何错误当我将文件从数据库导出到.csv文件时,某些记录将丢失。它将终止数据导出。匿名123:请编辑您的原始问题,并向我们展示您如何将数据导出到.csv文件。“当数据库无法插入数据库时,您可以在代码中添加异常”-您的意思是什么?在我的insert sql语句中添加什么?你能进一步解释一下吗?非常感谢。感谢您的回复和示例,Swing Magic。我不认为问题与将记录插入数据库有关,因为当我导出CSV文件时,我不执行插入查询,我只使用select查询检索存储在数据库中的所需记录。顺便说一下,在导出CSV文件时,有一些数据采集器允许用户选择日期范围。问题将出现在这里,但是,如果我只选择一个日期,它可以正常工作。这个问题只有在我选择日期范围时才会出现。我尝试了mysql_num_rows来检查它是否在select query之后成功地从数据库中获取了所有记录,结果是正确的,但是当我打开CSV文件时,并不是所有的记录都会出现。