PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: SQL Code wird nicht per mysql_unbuffered_query ausgeführt


King555
2005-03-13, 15:53:26
Mit folgendem Code lese ich ein SQL Skript ein (bzw. die ersten 2000 Zeilen). Es handelt sich bei dem Skript um Insert-Anweisungen, wobei jede Insert Anweisung in einer Zeile steht.


function processfile($filename, $db_host, $db_user, $db_password, $db_name, $lastline) {
$script = @fopen($filename, "r");
if ($script == false) {
// error opening file
die_custom('Script file '.$filename.' could not be opened. Skriptdatei '.$filename.' konnte nicht geöffnet werden.');
}
else {
// process sql script
$c = 0;
$sqlcmd = '';

while (!feof($script)) {
for ($i = 1; $i <= $lastline; $i++) {
if (feof($script) == true) break;
else $buffer = fgets($script);
}

if (!feof($script)) {
$buffer = fgets($script);
$sqlcmd .= $buffer;
$c++;
}

if ((($c == 2000) or (feof($script) == true)) and ($sqlcmd != '')) {
// connect to db server
$db = mysql_connect($db_host, $db_user, $db_password) or die_custom('MySQL error: ' . mysql_error());
// open database
mysql_select_db($db_name, $db) or die_custom('MySQL error: ' . mysql_error());
// run script
mysql_unbuffered_query($sqlcmd) or die_custom('MySQL error: ' . mysql_error());
// close database
mysql_close($db) or die_custom('MySQL error: ' . mysql_error());

break;
}
}
}
$eof = feof($script);
fclose($script);

if ($eof == true)
return -1;
else
return ($c + $lastline);
}


Problem: Bei "mysql_unbuffered_query [...]" kommt ein Fehler.

MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; truncate table `bb1_userfields`; truncate table `bb1_users`; insert into bb' at line 1

Lese ich statt 2000 Zeilen nur eine einzige ein, klappt es. Bei zwei Zeilen geht es wieder nicht.

Warum?

Edit: Hat sich erledigt! Habe die Lösung selbst gefunden! MySQL kann immer nur eine einzige Zeile (also einen Befehl) gleichzeitig verarbeiten.