2014-10-23 2 views
0

PHPExcel을 사용하여 MySQL에 xls를 가져옵니다. 최근 PDO에 연결을 전환했습니다. 하지만 그때 오류 협정. NULL 인 내 xls의 필드는 더 이상 허용되지 않습니다. 왜? NULL 값을 허용하도록 코드를 변경하려면 어떻게해야합니까?쿼리를 실행하지 못했습니다 : 1048 'element_oppningar'열은 null이 될 수 없습니다.

PHP :

if(isset($_POST["Import"])){ 
echo '<a href=".php">Fortsätt...</a><br />'; 
echo $path=$_FILES["file"]["tmp_name"]; 

//Load file into PHPExcel 
$objPHPExcel = PHPExcel_IOFactory::load($path); 

//Loop threw file to get data 
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
    $worksheetTitle  = $worksheet->getTitle(); 
    $highestRow   = $worksheet->getHighestRow(); // e.g. 10 
    $highestColumn  = 'J'; //$worksheet->getHighestColumn(''); // e.g 'F' 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
    $nrColumns = ord($highestColumn) - 64; 

//Echo file info 
echo "<br>The worksheet ".$worksheetTitle." has "; 
echo $nrColumns . ' columns (A-' . $highestColumn . ') '; 
echo ' and ' . $highestRow . ' row.'; 
echo '<br>Data: <table border="1"><tr>'; 

//Loop threw colum, rows and cells 
for ($row = 2; $row <= $highestRow; ++ $row) { 
    echo '<tr>'; 
    for ($col = 0; $col < $highestColumnIndex; ++ $col) { 
     $cell = $worksheet->getCellByColumnAndRow($col, $row); 
     $val = $cell->getCalculatedValue(); 
     //$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val); 
     echo '<td>' . $val . '<br></td>'; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 
} 

for ($row = 2; $row <= $highestRow; ++ $row) { 
$val=array(); 
for ($col = 0; $col < $highestColumnIndex; ++ $col) { 
$cell = $worksheet->getCellByColumnAndRow($col, $row); 
$val[] = $cell->getCalculatedValue(); 
} 
// Prepare Query 
    $query = "INSERT INTO table(
       objekt_nr, 
       objekt_rev, 
       element_nr, 
       element_hojd, 
       element_typ, 
       element_langd, 
       element_oppningar, 
       element_vikt, 
       element_ritare, 
       element_status) 
      VALUES ( 
      :objekt_nr, 
      :objekt_rev, 
      :element_nr, 
      :element_hojd, 
      :element_typ, 
      :element_langd, 
      :element_oppningar, 
      :element_vikt, 
      :element_ritare, 
      :element_status 
     )"; 

    // Security measures 
    $query_params = array( 
     ':objekt_nr' => $val[0], 
     ':objekt_rev' => $val[1], 
     ':element_nr' => $val[2], 
     ':element_hojd' => $val[3], 
     ':element_typ' => $val[4], 
     ':element_langd' => $val[5], 
     ':element_oppningar' => $val[6], 
     ':element_vikt' => $val[7], 
     ':element_ritare' => $val[8], 
     ':element_status' => $val[9] 
    ); 
    try { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
+0

데이터베이스에 'not null'로 정의 된 필드가 있습니다. 테이블에서'alter'를 수행하고 not null 제약 조건을 제거하는 것 이외에 코드를 덮어 쓸 수있는 방법은 없습니다. –

+0

@MarcB 확인. 그래서, 내가 mysql을 사용할 때 나는 빈 값을 보냈다. 그래서 나는이 메시지를받지 못했습니다. 루프가 끝나면 NULL이 멈 춥니 다. mysql과 같이 빈 값을 보내려면 어떻게 코드를 바꿀 수 있습니까? 이제 PDO가 있습니까? – N1CKN4M3

답변

0

당신이 데이터베이스 테이블이 아닌 코드를 편집해야 NULL 값을 적용합니다. 귀하의 메시지 오류는 PHP가 아닌 MySQL에 의해 생성됩니다.

+0

확인. 그래서, 내가 mysql을 사용할 때 나는 빈 값을 보냈다. 그래서 나는이 메시지를받지 못했습니다. 루프가 끝나면 NULL이 멈 춥니 다. mysql과 같이 빈 값을 보내려면 어떻게 코드를 바꿀 수 있습니까? 이제 PDO가 있습니까? – N1CKN4M3

+0

[이 방법들] (http://stackoverflow.com/questions/12285511/ignore-empty-cells-phpexcel)을 사용해 보셨습니까? –

관련 문제