Już wcześniej zapytałem coś o łapanie błędów w wielu zapytaniach w PHP, ale nikt nie odpowiedział. Teraz trochę googlowałem i zrozumiałem nieco więcej problemu.Pozwalanie na wykonywanie wielu zapytań PHP, jeśli wystąpią błędy
mam ten kod:
// Some starting variables
$test = new mysqli("localhost","root","","testdatabase");
$Query = array();
$Query[] = "SELECT 'wos' FROM items WHERE itemID = 3";
$Query[] = "SELECT 'wos' FROM items WHERE itemID";
$Query[] = "SELECT 'wos' FROM items WHERE itemID = 5";
$Query = implode(";",$Query);
$Errors = array();
// Execute multi query
if ($test->multi_query($Query)) {
do {
// fetch results
$Result = $test->store_result();
print_r($Result);
if($test->errno === 0) {
echo $Result->num_rows . "<br>";
}
else {
$Errors[] = $test->error;
}
$Result->close();
if (!$test->more_results()) {
break;
}
if (!$test->next_result()) {
$Errors[] = $test->error;
break;
}
} while (true);
}
Jak widać mam szereg X kolejnych zapytań i chcesz je wszystkie wykonać. Więc jeśli zapytanie 2 zakończy się niepowodzeniem, chcę kontynuować wielo-kwerendę, aby umożliwić uruchomienie następujących zapytań. Jak mogę to zrobić?
Ponadto, jeśli wystąpi błąd, chcę zapisać ten błąd w numerze $Errors
. Jednak obecnie nie działa tak jak należy, ponieważ mogę zapisać tylko komunikat o błędzie, ale nie odpowiednie zapytanie. Tylko komunikat o błędzie nie jest naprawdę pomocny bez zapytania, które nie powiodło się. Więc chcę mieć coś takiego: "Query 3 failed ('SELECT ...'): 'ERROR MESSAGE'"
.
Jak to jest możliwe? Jestem w stanie uzyskać bieżący błąd w pętli z $test->error
, ale nie mam nic takiego jak $test->currentsubsequentquery
. Jak mogę to zrobić?
Wielkie dzięki.
Nie widzę nigdzie miejsca, w którym zdefiniowano $ test lub jakiejkolwiek metody, do której się dzwoni. Niemożliwe, aby pomóc, jeśli nie wiemy co robi twój kod – Kyle
$ test = nowy mysqli ("localhost", "root", "", "testdatabase"); – Shiuyin
Jeśli błędy SQL są możliwym, oczekiwanym rezultatem, to robisz coś nie tak. "Robimy coś w rodzaju klienta SQL (lub terminala), dlaczego tak naprawdę potrzebujesz wykonać tyle zapytań naraz?" –