-3

私は以下のコードを使用して、PHPのmysqlにExcelとINSERTをアップロードしています

public function read_file($table = 'users', $filename = 'test.xls') {


        $this->load->library('Spreadsheet_Excel_Reader');

        //$data = new Spreadsheet_Excel_Reader($pathToFile);
        $data = new Spreadsheet_Excel_Reader();
         $data->read($filename);

        $sql = "INSERT INTO $table (";

        for($index = 1;$index <= $data->sheets[0]['numCols']; $index++){
            $sql.= strtolower($data->sheets[0]['cells'][1][$index]) . ", ";
        }
        $valuesSQL = '';
        $sql = rtrim($sql, ", ")." ) VALUES ( ";
        for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {

            for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
                $valuesSQL .= "\"" . $data->sheets[0]['cells'][$i][$j] . "\"";
                if($j!=$data->sheets[0]['numCols']){
                        $valuesSQL .= ",";
                }
            }
            if($i!=$data->sheets[0]['numRows']){
                $valuesSQL .= "),(";
            }else{
                $valuesSQL .= ")";
            }
        }
        $sqlQuery = $sql . rtrim($valuesSQL);

        return($sqlQuery );
    }

以下のエラーが発生します

A PHP Error was encountered

Severity: Notice

Message: Undefined offset: 3

Filename: controllers/userInfo.php

Line Number: 154
A PHP Error was encountered

Severity: Notice

Message: Undefined offset: 3

Filename: controllers/userInfo.php

Line Number: 154

私はcodeigniterphpフレームワークを使用しています。

行番号154->$valuesSQL .= "\"" . $data->sheets[0]['cells'][$i][$j] . "\"";

4

1 に答える 1

1

これは、行3が存在しないか、(より可能性が高い)列"C"がスプレッドシート行の1つの空のセルであることを意味します。isset($ data-> sheets [0] ['cells'] [$ i] [$ j])を使用する前にテストし、そうでない場合はSQLに適切なNULL値を設定する必要があります。

if isset($data->sheets[0]['cells'][$i][$j]) {
    $valuesSQL .= "\"" . $data->sheets[0]['cells'][$i][$j] . "\""; 
} else {
    $valuesSQL .= 'NULL'; 
}
于 2012-06-12T13:26:20.170 に答える