2016-05-31 4 views
1

Mysql 데이터베이스에서 데이터를 삽입하기위한 함수가 insertInto이고 배열의 현재 행이 이미 존재하는지 확인하는 경우 checkRow이 있습니다. 배열 tableArray의 구조는 $ tableArray [ "Tabelle2"] [행 수] [열 수]입니다. 그러나 항상 페이지를 새로 고칠 때 데이터베이스에 더 많은 행을 삽입하고 행이 이미 있는지 확인하지 않아야합니다.무한 루프가 함수를 호출 할 때

기능 insertInto :

function insertInto($i, $tableArray, $conn){ //insert into db 
    $dateFormated = split('/', $tableArray["Tabelle2"][$i][3]); 
    $date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1]; 

    $insertInto = "insert into Excel(Arbeitsplatz, Auftragsart, Auftragsnummer, Datum, Tageszeit, Erklaerung, Beschreibung, AG, StdArt, Anwender) 
    values('".$tableArray["Tabelle2"][$i][0]."', '".$tableArray["Tabelle2"][$i][1]."', '".$tableArray["Tabelle2"][$i][2]."', '".$date."', 
    '".$tableArray["Tabelle2"][$i][4]."', '".$tableArray["Tabelle2"][$i][5]."', '".$tableArray["Tabelle2"][$i][6]."', 
    '".$tableArray["Tabelle2"][$i][7]."', '".$tableArray["Tabelle2"][$i][8]."', '".$tableArray["Tabelle2"][$i][9]."')"; 
    if($conn->query($insertInto) === true){echo "Datensatz Nr. ".$i." wurde eingefuegt.<br />";}else{echo "Datensatz Nr. ".$i." wurde nicht eingefuegt.<br />";} 
} 

함수 checkRow :

function checkRow($i, $tableArray, $conn){ //if(... == ...) 
    $count = "select count(*) from Excel;"; 
    $res = $conn->query($count); 
    $row = $res->fetch_assoc(); 
    $rowsNum = $row["count(*)"];  
    if($rowsNum == 0){ 
     insertInto($i, $tableArray, $conn); 
    } else { 
     for($b = 1; $b <= $rowsNum; $b++){ 
      $select = "select * from Excel where ExcelID = '".$b."'"; 
      $result = $conn->query($select); 
      $row = $result->fetch_assoc(); 
      if($tableArray["Tabelle2"][$i][0] == $row["Arbeitsplatz"] && $tableArray["Tabelle2"][$i][1] == $row["Auftragsart"] && $tableArray["Tabelle2"][$i][2] == $row["Auftragsnummer"] && $tableArray["Tabelle2"][$i][4] == $row["Tageszeit"] && $tableArray["Tabelle2"][$i][5] == $row["Erklaerung"] && $tableArray["Tabelle2"][$i][6] == $row["Beschreibung"] && $tableArray["Tabelle2"][$i][7] == $row["AG"] && $tableArray["Tabelle2"][$i][8] == $row["StdArt"] && $tableArray["Tabelle2"][$i][9] == $row["Anwender"]){ 
       echo "Datensatz ist bereits vorhanden.<br />"; 
      } else { 
       insertInto($i, $tableArray, $conn); 
      } 
     } 
    } 
} 

I는 함수 checkRow 호출 루프 :

for($g = 1; $g <= count($tableArray["Tabelle2"]); $g++){ 
    checkRow($g, $tableArray, $conn); 
} 

답변

0

그것을 해결, 피 문제는 checkRow();이었고, 나는 항상 배열에있는 현재 행을 MySQL 데이터베이스의 1 행과 모두 검사하지는 않았다. 배열의 현재 행이 데이터베이스의 행과 동일하지 않은 경우 항상 +1을 포함하는 $counter을 추가하여 문제를 해결했습니다.

업데이트 기능 checkRow :

function checkRow($i, $tableArray, $conn){ //if(... == ...) 
      $count = "select count(*) from Excel;"; 
      $res = $conn->query($count); 
      $row = $res->fetch_assoc(); 
      $rowsNum = $row["count(*)"]; 
      $counter = 0; 

      if($rowsNum == 0){ 
       insertInto($i, $tableArray, $conn); 
       } elseif($rowsNum > 0) { 
        for($b = 1; $b <= $rowsNum; $b++){ 
         $select = "select * from Excel where ExcelID = '".$b."'"; 
         $result = $conn->query($select); 
         $row = $result->fetch_assoc(); 
         if($tableArray["Tabelle2"][$i][0] == $row["Arbeitsplatz"] && $tableArray["Tabelle2"][$i][1] == $row["Auftragsart"] && $tableArray["Tabelle2"][$i][2] == $row["Auftragsnummer"] && $tableArray["Tabelle2"][$i][4] == $row["Tageszeit"] && $tableArray["Tabelle2"][$i][5] == $row["Erklaerung"] && $tableArray["Tabelle2"][$i][6] == $row["Beschreibung"] && $tableArray["Tabelle2"][$i][7] == $row["AG"] && $tableArray["Tabelle2"][$i][8] == $row["StdArt"] && $tableArray["Tabelle2"][$i][9] == $row["Anwender"]){ 
           echo "Datensatz ist bereits vorhanden.<br />"; 
          } else {$counter++;} 
        } 
        if($counter == $rowsNum){ 
         insertInto($i, $tableArray, $conn); 
         $counter = 0; 
        } 
       } 
     } 
관련 문제