Hi!
Ich habe mal gerade zum Testen dieses kleine Script zusammen gebastelt:
<?php
$test = new mysqli("localhost","root","","journaldatabase");
// Some starting variables
$Query = array();
$Query[] = "SELECT 'wos' FROM items WHERE itemID = 3";
$Query[] = "SELECT 'wos' FROM items WHERE itemID = 'lkasjdg'";
$Query[] = "SELECT 'wos' FROM items WHERE itemID = 5";
$Query = implode(";",$Query);
$Errors = array();
// Execute multi query
if ($test->multi_query($Query)) {
do {
// Current result set
$Result = $test->store_result();
$Errors[] = $test->error;
var_dump($Result);
echo $Result->num_rows. " result found<br />";
$Result->close();
}
while ($test->next_result() && $test->more_results());
}
var_dump($Errors);
?>
Was ich erreichen möchte ist, dass ich am Ende ein Array an Fehlermeldungen habe, wie z.B: "Query 3 ist fehlgeschlagen, Query 5 ist fehlgeschlagen", etc. Aber wie catch man Fehler in Multi Querys vernünftig? Ich hab jetzt schon einige Zeit danach gegoogelt und scheinbar haben andere ebenfalls dieses Problem. Nur nirgendswo finde ich eine verünftige Antwort.
Was ich mittlerweile gelernt habe ist, dass beim ersten Fehler das ganze abbricht und weitere Querys NICHT ausgeführt werden. (Das möchte ich allerdings auch nicht!). Jedenfalls funktioniert mein Beispiel da oben bisher so, dass er jedes einzelne Resultset durchgeht und eigentlich mit $Errors[] = $test->error; die gerade aufgetretene Fehlermeldung an $Errors weiterleiten sollte. Tut er aber irgendwie nicht bei der zweiten Query, die ich ja absichtlich fehlerhaft gestaltet habe. Also wie stelle ich das jetzt vernünftig an? Die Beispiele auf php.net sind nicht wirklich zielführend.
Ich bin auch schon auf die Idee gekommen einfach if(count($Query) === count($Errors)) zu machen, allerdings weiß ich dann nur, ob die vorgesehene Anzahl an Querys - also alle vorhandenen - ausgeführt wurde und keine mit Fehlern abgebrochen ist, ich möchte aber bitte wissen WELCHE mit Fehler abgebrochen ist und was die Fehlermeldung war. Nur irgendwie funktioniert das mit meinem $test->error; nicht ganz.
Weiß da jemand Rat?
Vielen dank.