【问题标题】:endless for loop when calling a function调用函数时无限循环
【发布时间】:2016-05-31 07:53:26
【问题描述】:

我有 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);
}

【问题讨论】:

    标签: php arrays function loops


    【解决方案1】:

    我解决了,问题出在函数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;
                        }
                    }
            }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多