function get_sqlbefehl()
{
    global $restore, $config, $databases, $lang;
    //Init
    $restore['fileEOF'] = false;
    $restore['EOB'] = false;
    $complete_sql = '';
    $sqlparser_status = 0;
    if (!isset($restore['eintraege_ready'])) {
        $restore['eintraege_ready'] = 0;
    }
    //Parsen
    while ($sqlparser_status != 100 && !$restore['fileEOF'] && !$restore['EOB']) {
        //nächste Zeile lesen
        $zeile = $restore['compressed'] ? gzgets($restore['filehandle']) : fgets($restore['filehandle']);
        if (DEBUG) {
            echo "<br><br>Zeile: " . htmlspecialchars($zeile);
        }
        /******************* Setzen des Parserstatus *******************/
        // herausfinden um was für einen Befehl es sich handelt
        if ($sqlparser_status == 0) {
            //Vergleichszeile, um nicht bei jedem Vergleich strtoupper ausführen zu müssen
            $zeile2 = strtoupper(trim($zeile));
            // pre-built compare strings - so we need the CPU power only once :)
            $sub9 = substr($zeile2, 0, 9);
            $sub7 = substr($sub9, 0, 7);
            $sub6 = substr($sub7, 0, 6);
            $sub4 = substr($sub6, 0, 4);
            $sub3 = substr($sub4, 0, 3);
            $sub2 = substr($sub3, 0, 2);
            $sub1 = substr($sub2, 0, 1);
            if ($sub7 == 'INSERT ') {
                $sqlparser_status = 3;
                //Datensatzaktion
                $restore['actual_table'] = get_tablename($zeile);
            } elseif ($sub7 == 'LOCK TA') {
                $sqlparser_status = 4;
            } elseif ($sub6 == 'COMMIT') {
                $sqlparser_status = 7;
            } elseif (substr($sub6, 0, 5) == 'BEGIN') {
                $sqlparser_status = 7;
            } elseif ($sub9 == 'UNLOCK TA') {
                $sqlparser_status = 4;
            } elseif ($sub3 == 'SET') {
                $sqlparser_status = 4;
            } elseif ($sub6 == 'START ') {
                $sqlparser_status = 4;
            } elseif ($sub3 == '/*!') {
                $sqlparser_status = 5;
            } elseif ($sub9 == 'ALTER TAB') {
                $sqlparser_status = 4;
            } elseif ($sub9 == 'CREATE TA') {
                $sqlparser_status = 2;
            } elseif ($sub9 == 'CREATE AL') {
                $sqlparser_status = 2;
            } elseif ($sub9 == 'CREATE IN') {
                $sqlparser_status = 4;
            } elseif ($sqlparser_status != 5 && substr($zeile2, 0, 2) == '/*') {
                $sqlparser_status = 6;
            } elseif ($sub9 == 'DROP TABL') {
                $sqlparser_status = 1;
            } elseif ($sub9 == 'DROP VIEW') {
                $sqlparser_status = 1;
            } elseif ($sub9 == 'CREATE DA') {
                $sqlparser_status = 7;
            } elseif ($sub9 == 'DROP DATA ') {
                $sqlparser_status = 7;
            } elseif ($sub3 == 'USE') {
                $sqlparser_status = 7;
            } elseif ($sub6 == '-- EOB' || $sub4 == '# EO') {
                $restore['EOB'] = true;
                $restore['fileEOF'] = true;
                $zeile = '';
                $zeile2 = '';
                $sqlparser_status = 100;
            } elseif ($sub2 == '--' || $sub1 == '#') {
                $zeile = '';
                $zeile2 = '';
                $sqlparser_status = 0;
            }
            // Fortsetzung von erweiterten Inserts
            if ($restore['flag'] == 1) {
                $sqlparser_status = 3;
            }
            if ($sqlparser_status == 0 && trim($complete_sql) > '' && $restore['flag'] == -1) {
                // Unbekannten Befehl entdeckt
                v($restore);
                echo "<br>Sql: " . htmlspecialchars($complete_sql);
                echo "<br>Erweiterte Inserts: " . $restore['erweiterte_inserts'];
                die('<br>' . $lang['L_UNKNOWN_SQLCOMMAND'] . ': ' . $zeile . '<br><br>' . $complete_sql);
            }
            /******************* Ende von Setzen des Parserstatus *******************/
        }
        $last_char = substr(rtrim($zeile), -1);
        // Zeilenumbrüche erhalten - sonst werden Schlüsselwörter zusammengefügt
        // z.B. 'null' und in der nächsten Zeile 'check' wird zu 'nullcheck'
        $complete_sql .= $zeile . "\n";
        if ($sqlparser_status == 3) {
            //INSERT
            if (SQL_Is_Complete($complete_sql)) {
                $sqlparser_status = 100;
                $complete_sql = trim($complete_sql);
                if (substr($complete_sql, -2) == '*/') {
                    $complete_sql = remove_comment_at_eol($complete_sql);
                }
                // letzter Ausdruck des erweiterten Inserts erreicht?
                if (substr($complete_sql, -2) == ');') {
                    $restore['flag'] = -1;
                } else {
                    if (substr($complete_sql, -2) == '),') {
                        // letztes Komme gegen Semikolon tauschen
                        $complete_sql = substr($complete_sql, 0, -1) . ';';
                        $restore['erweiterte_inserts'] = 1;
                        $restore['flag'] = 1;
                    }
                }
                if (substr(strtoupper($complete_sql), 0, 7) != 'INSERT ') {
                    // wenn der Syntax aufgrund eines Reloads verloren ging - neu ermitteln
                    if (!isset($restore['insert_syntax'])) {
                        $restore['insert_syntax'] = get_insert_syntax($restore['actual_table']);
                    }
                    $complete_sql = $restore['insert_syntax'] . ' VALUES ' . $complete_sql . ';';
                } else {
                    // INSERT Syntax ermitteln und merken
                    $ipos = strpos(strtoupper($complete_sql), ' VALUES');
                    if (!$ipos === false) {
                        $restore['insert_syntax'] = substr($complete_sql, 0, $ipos);
                    } else {
                        $restore['insert_syntax'] = 'INSERT INTO `' . $restore['actual_table'] . '`';
                    }
                }
            }
        } else {
            if ($sqlparser_status == 1) {
                //Löschaktion
                if ($last_char == ';') {
                    $sqlparser_status = 100;
                }
                //Befehl komplett
                $restore['actual_table'] = get_tablename($complete_sql);
            } else {
                if ($sqlparser_status == 2) {
                    // Createanweisung ist beim Finden eines ; beendet
                    if ($last_char == ';') {
                        if ($config['minspeed'] > 0) {
                            $restore['anzahl_zeilen'] = $config['minspeed'];
                        }
                        // Soll die Tabelle hergestellt werden?
                        $do_it = true;
                        if (is_array($restore['tables_to_restore'])) {
                            $do_it = false;
                            if (in_array($restore['actual_table'], $restore['tables_to_restore'])) {
                                $do_it = true;
                            }
                        }
                        if ($do_it) {
                            $tablename = submit_create_action($complete_sql);
                            $restore['actual_table'] = $tablename;
                            $restore['table_ready']++;
                        }
                        // Zeile verwerfen, da CREATE jetzt bereits ausgefuehrt wurde und naechsten Befehl suchen
                        $complete_sql = '';
                        $sqlparser_status = 0;
                    }
                } else {
                    if ($sqlparser_status == 4) {
                        //Createindex
                        if ($last_char == ';') {
                            if ($config['minspeed'] > 0) {
                                $restore['anzahl_zeilen'] = $config['minspeed'];
                            }
                            $complete_sql = del_inline_comments($complete_sql);
                            $sqlparser_status = 100;
                        }
                    } else {
                        if ($sqlparser_status == 5) {
                            //Anweisung
                            $t = strrpos($zeile, '*/;');
                            if (!$t === false) {
                                $restore['anzahl_zeilen'] = $config['minspeed'];
                                $sqlparser_status = 100;
                                if ($config['ignore_enable_keys'] && strrpos($zeile, 'ENABLE KEYS ') !== false) {
                                    $sqlparser_status = 100;
                                    $complete_sql = '';
                                }
                            }
                        } else {
                            if ($sqlparser_status == 6) {
                                $t = strrpos($zeile, '*/');
                                if (!$t === false) {
                                    $complete_sql = '';
                                    $sqlparser_status = 0;
                                }
                            } else {
                                if ($sqlparser_status == 7) {
                                    //Anweisung
                                    if ($last_char == ';') {
                                        if ($config['minspeed'] > 0) {
                                            $restore['anzahl_zeilen'] = $config['minspeed'];
                                        }
                                        $complete_sql = '';
                                        $sqlparser_status = 0;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if ($restore['compressed'] && gzeof($restore['filehandle'])) {
            $restore['fileEOF'] = true;
        }
        if (!$restore['compressed'] && feof($restore['filehandle'])) {
            $restore['fileEOF'] = true;
        }
    }
    // wenn bestimmte Tabellen wiederhergestellt werden sollen -> pruefen
    if (is_array($restore['tables_to_restore']) && !in_array($restore['actual_table'], $restore['tables_to_restore'])) {
        $complete_sql = '';
    }
    return trim($complete_sql);
}
function get_sqlbefehl()
{
    global $restore, $config, $databases, $lang;
    //Init
    $restore['fileEOF'] = false;
    $restore['EOB'] = false;
    $complete_sql = '';
    $sqlparser_status = 0;
    if (!isset($restore['eintraege_ready'])) {
        $restore['eintraege_ready'] = 0;
    }
    //Parsen
    while ($sqlparser_status != 100 && !$restore['fileEOF'] && !$restore['EOB']) {
        //nächste Zeile lesen
        $zeile = $restore['compressed'] ? gzgets($restore['filehandle']) : fgets($restore['filehandle']);
        /******************* Setzen des Parserstatus *******************/
        // herausfinden um was für einen Befehl es sich handelt
        if ($sqlparser_status == 0) {
            //Vergleichszeile, um nicht bei jedem Vergleich strtoupper ausführen zu müssen
            $zeile2 = strtoupper(trim($zeile));
            // Am Ende eines MySQLDumper-Backups angelangt?
            if (substr($zeile2, 0, 6) == '-- EOB' || substr($zeile2, 0, 5) == '# EOB') {
                $restore['EOB'] = true;
                $zeile = '--';
                $zeile2 = '--';
                $sqlparser_status = 100;
            }
            // Kommenatr?
            if (substr($zeile2, 0, 2) == '--' || substr($zeile2, 0, 1) == '#') {
                $zeile = '';
                $zeile2 = '';
                $sqlparser_status = 0;
            }
            //Einfache Anweisung finden die mit Semikolon beendet werden
            if (substr($zeile2, 0, 11) == 'LOCK TABLES') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 6) == 'COMMIT') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 5) == 'BEGIN') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 13) == 'UNLOCK TABLES') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 4) == 'SET ') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 6) == 'START ') {
                $sqlparser_status = 5;
            }
            if (substr($zeile2, 0, 3) == '/*!') {
                $sqlparser_status = 5;
            }
            //MySQL-Condition oder Kommentar
            if (substr($zeile2, 0, 12) == 'CREATE TABLE') {
                $sqlparser_status = 2;
            }
            //Createaktion
            if (substr($zeile2, 0, 12) == 'CREATE INDEX') {
                $sqlparser_status = 4;
            }
            //Indexaktion
            //Kommentar
            if ($sqlparser_status != 5 && substr($zeile2, 0, 2) == '/*') {
                $sqlparser_status = 6;
            }
            // Befehle, die nicht ausgeführt werden sollen
            if (substr($zeile2, 0, 4) == 'USE ') {
                $sqlparser_status = 7;
            }
            if (substr($zeile2, 0, 14) == 'DROP DATABASE ') {
                $sqlparser_status = 7;
            }
            if (substr($zeile2, 0, 10) == 'DROP TABLE') {
                $sqlparser_status = 1;
            }
            //Löschaktion
            if (substr($zeile2, 0, 7) == 'INSERT ') {
                $sqlparser_status = 3;
                //Datensatzaktion
                //$restore['actual_table']=strtolower(get_tablename_aus_insert($zeile));
                $restore['actual_table'] = get_tablename_aus_insert($zeile);
                // Pruefen ob die Spaltenanzahl bekannt ist und wenn nicht setzen
                if (!isset($restore['num_table_fields'][$restore['actual_table']])) {
                    $restore['num_table_fields'][$restore['actual_table']] = get_num_rows($restore['actual_table']);
                }
            }
            // Fortsetzung von erweiterten Inserts
            if ($restore['flag'] == 1) {
                $sqlparser_status = 3;
            }
            if ($sqlparser_status == 0 && trim($complete_sql) > '' && $restore['flag'] == -1) {
                // Unbekannten Befehl entdeckt
                v($restore);
                echo "<br>Sql: " . $complete_sql;
                echo "<br>Erweiterte Inserts: " . $restore['erweiterte_inserts'];
                die('<br>' . $lang['unknown_sqlcommand'] . ': ' . $zeile);
            }
            /******************* Ende von Setzen des Parserstatus *******************/
        }
        $last_char = substr(rtrim($zeile), -1);
        // Zeilenumbrüche erhalten - sonst werden Schlüsselwörter zusammengefügt
        // z.B. 'null' und in der nächsten Zeile 'check' wird zu 'nullcheck'
        $complete_sql .= $zeile . "\n";
        if ($sqlparser_status == 1) {
            //Löschaktion
            if ($last_char == ';') {
                $sqlparser_status = 100;
            }
            //Befehl komplett
        }
        if ($sqlparser_status == 2) {
            // Createanweisung ist beim Finden eines ; beendet
            if ($last_char == ';') {
                if ($config['minspeed'] > 0) {
                    $restore['anzahl_zeilen'] = $config['minspeed'];
                }
                //Spaltenanzahl fuer diese Tabelle merken
                $restore['actual_table'] = get_tablename($complete_sql);
                $complete_sql = del_inline_comments($complete_sql);
                //Inline-Kommentare entfernen
                //Create ausfuehren und Anzahl der Spalten speichern
                $restore['actual_fieldcount'] = submit_create_action($complete_sql);
                $restore['num_table_fields'][$restore['actual_table']] = $restore['actual_fieldcount'];
                // Zeile verwerfen und naechsten Befehl suchen
                $complete_sql = '';
                $sqlparser_status = 0;
            }
        }
        if ($sqlparser_status == 3) {
            //INSERT
            // Anzahl der Felder ermitteln wenn unbekannt
            if (!isset($restore['num_table_fields'][$restore['actual_table']])) {
                $restore['num_table_fields'][$restore['actual_table']] = get_num_rows($restore['actual_table']);
            }
            $AnzahlFelder = SQL_Is_Complete($complete_sql, $restore['num_table_fields'][$restore['actual_table']], DEBUG);
            // einen vollständigen Insert ermittelt
            if ($AnzahlFelder == $restore['num_table_fields'][$restore['actual_table']]) {
                $sqlparser_status = 100;
                $complete_sql = trim($complete_sql);
                // letzter Ausdruck des erweiterten Inserts erreicht?
                if (substr($complete_sql, -2) == ');') {
                    $restore['flag'] = -1;
                }
                // Wenn am Ende der Zeile ein Klammer Komma -> erweiterter Insert-Modus -> Steuerflag setzen
                if (substr($complete_sql, -2) == '),') {
                    // letztes Komme gegen Semikolon tauschen
                    $complete_sql = substr($complete_sql, 0, -1) . ';';
                    $restore['erweiterte_inserts'] = 1;
                    $restore['flag'] = 1;
                }
                if (substr($complete_sql, 0, 7) != 'INSERT ') {
                    $complete_sql = $restore['insert_syntax'] . ' VALUES ' . $complete_sql . ';';
                } else {
                    // INSERT Syntax ermitteln und merken
                    $ipos = strpos(strtoupper($complete_sql), 'VALUES');
                    if (!$ipos === false) {
                        $restore['insert_syntax'] = substr($complete_sql, 0, $ipos);
                    } else {
                        $restore['insert_syntax'] = 'INSERT INTO `' . $restore['actual_table'] . '`';
                    }
                }
                if ($AnzahlFelder > $restore['num_table_fields'][$restore['actual_table']] && $restore['erweiterte_inserts'] == 0) {
                    if (!isset($restore['table_create'][$restore['actual_table']])) {
                        global $lang;
                        include './inc/functions_sql.php';
                        $restore['table_create'][$restore['actual_table']] = GetCreateTable($databases['db_actual'], $restore['actual_table']);
                    }
                    echo '<form action="main.php?action=extinfo" method="post">';
                    echo '<p class="warnung">Parser-Fehler : zuviele gezählt in Tabelle ' . $restore["actual_table"] . ' (' . $AnzahlFelder . ' statt ' . $restore["num_table_fields"][$restore["actual_table"]] . ')';
                    echo '<br>Aktuelle Tabelle: ' . $restore['actual_table'];
                    echo '<h4>CREATE-Anweisung</h4><textarea name="create_sql" style="width:90%;height:200px;">' . $restore["table_create"][$restore["actual_table"]] . '</textarea>';
                    echo '<h4>INSERT-Anweisung</h4><textarea name="insert_sql" style="width:90%;height:200px;">' . $complete_sql . '</textarea></p><br>';
                    echo '<br><br><input type="submit" name="tell_error" value="Fehlerbericht"></form>' . $zeile;
                    die;
                }
            }
        }
        // Index
        if ($sqlparser_status == 4) {
            //Createindex
            if ($last_char == ';') {
                if ($config['minspeed'] > 0) {
                    $restore['anzahl_zeilen'] = $config['minspeed'];
                }
                $complete_sql = del_inline_comments($complete_sql);
                $sqlparser_status = 100;
                //Befehl komplett
            }
        }
        // Kommentar oder Condition
        if ($sqlparser_status == 5) {
            //Anweisung
            if ($last_char == ';') {
                if ($config['minspeed'] > 0) {
                    $restore['anzahl_zeilen'] = $config['minspeed'];
                }
                $complete_sql = del_inline_comments($complete_sql);
                $sqlparser_status = 100;
                //Befehl komplett
            }
        }
        // Mehrzeiliger oder Inline-Kommentar
        if ($sqlparser_status == 6) {
            if (!strrpos($zeile, '*/') === false) {
                $complete_sql = trim(del_inline_comments($complete_sql));
                $sqlparser_status = 0;
            }
        }
        // Befehle, die verworfen werden sollen
        if ($sqlparser_status == 7) {
            //Anweisung
            if ($last_char == ';') {
                if ($config["minspeed"] > 0) {
                    $restore["anzahl_zeilen"] = $config["minspeed"];
                }
                $complete_sql = '';
                $sqlparser_status = 0;
            }
        }
        if ($restore['compressed'] && gzeof($restore['filehandle'])) {
            $restore['fileEOF'] = true;
        }
        if (!$restore['compressed'] && feof($restore['filehandle'])) {
            $restore['fileEOF'] = true;
        }
    }
    return trim($complete_sql);
}