# sql Dateien per PHP ausführen



## TrunkZ (15. März 2004)

Hi, 
Ich bastel gerade einem Script und bin auf folgendes Problem gestoßen:
Im "database" Ordner befinden sich meherer *.sql Dateien. Diese will ich durch eine .php Datei ausführen lassen. Bisher tue ich das so:

Funktion execute - Diese Funktion sollte durch Aufrufen einer anderen (s. unten)  Funktion die sql Befehle holen und diese ausführen. Die Variable $type bestimmt hierbei, welche Funktion aufgerufen wird, und somit auch welche sql Datei aufgerufen wird.


```
function execute($type){
    $sql = $type();
    if($sql){
        if(execute_queries($sql, "smooth")){
            echo("MySQL Query erfolgreich ausgeführt!");
        }
        else{
            echo("Fehler beim Ausführen der MySQL Query.");
        }
    }
    else{
        echo("Fehler beim Einladen der *.sql Datei. Möglicherweise sind die .sql nicht upgeloaded (müssen im database Ordner sein.");
    }
    echo("<br>");
    print_back_button("install");
}
```


Funktion bnet_template - eine der Funktionen die durch $type() aufgerufen werden. Hier wird eine sql Datei eingeladen und an "#--" gesplittet (was nach jedem einzelnen Befehl in einer sql Datei enthalten ist..).


```
function bnet_template(){
    if($file = implode("", file("database/bnet-template.sql"))){
        $return = split("\#--", $file);
        return $return;
    }
    else{
        return 0;
    }
}
```


Funktion execute_queries - hier sollten die sql Befehle ausgeführt werden


```
function execute_queries($query,$type_error="none"){
	global $msg_error_sql_db;
	$flag = 1;
	while ($each_query = each($query))
		if (!(mysql_query($each_query[1]))){	// if error...
			if(strtoupper($type_error) == "DEBUG"){
				echo($msg_error_sql_db);
				echo("<br>Mysql Query : " . $each_query[1]);
				echo("<br>Mysql Error : " . mysql_error());
			}
			else{
				if (strtoupper($type_error) == "SMOOTH")
					echo("<br>" . $each_query[1] . " <font color=\"#ff0000\">[ERROR]</font>");
			}

			$flag = 0;
		}
		else{
			if($type_error=="smooth")
				echo("<br>" . $each_query[1] . " <font color=\"#006600\">[OK]</font>");
		}
	return $flag;
}
```


Nun zum eigentlichen Problem:
Auf meinem Apache Server scheint alles perfekt zu funktionieren, aber auf  meinem Webserver komischerweise nicht. Anscheinend kann er die sql Befehle nicht ausführen. Wenn ich sie per phpmyadmin ausführe, klappt alles perfekt. Wenn ich über die Funktion execute() zB Tables leeren oder löschen will, klappt alles perfekt. 
Hier mal ein Beispiel einer der sql Dateien:




> CREATE TABLE `ladder_design` (
> `id` smallint(2) NOT NULL auto_increment,
> `title` varchar(20) NOT NULL default '',
> `template` text NOT NULL,
> ...



thx


----------



## TrunkZ (16. März 2004)

weiß denn keiner weiter?


----------



## Sven Petruschke (16. März 2004)

Sorry, ich hab's nur überflogen und kann Dir wahrscheinlich nicht qualifiziert weiter helfen: Mir ist nur in den Sinn gekommen, dass man aus den einzelnen SQL-Anweisungen das abschließende Semikolon entfernen sollte. Ich weiß nicht, wie sich ansonsten die Funktion mysql_query() verhält.

snuu


----------

