调用函数时循环无穷

时间:2016-05-31 07:53:26

标签: php arrays function loops

我有2个函数,insertInto用于在Mysql数据库中插入来自ma数组的数据,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);
            }
        }
    }
}

我调用函数checkRow的循环:

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

1 个答案:

答案 0 :(得分:0)

我解决了它,问题出在函数checkRow();中,我总是在Mysql数据库中用1行检查数组中的当前行,而不是全部。通过添加$counter,如果数组中的当前行与数据库中的行不同,则总计+ 1,我解决了问题。

更新功能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;
                    }
                }
        }
相关问题