Ho già chiesto qualcosa sull'errore di cattura in una query multipla in PHP qualche tempo fa, ma nessuno ha risposto. Ora ho cercato su Google un po 'di più e ho capito un po' di più del problema.Lasciando una query multipla PHP continua se si verificano errori
ho ottenuto questo codice:
// 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);
}
Come potete vedere ho un certo numero di query successive X e voglio compiere tutti. Pertanto, se la query 2 non riesce, desidero continuare la multi-query per consentire l'esecuzione delle seguenti query. Come posso fare questo?
Inoltre, se si verifica un errore, desidero salvare questo errore in $Errors
. Tuttavia attualmente non funziona come previsto poiché posso solo salvare il messaggio di errore ma non la query corrispondente. Solo il messaggio di errore non è molto utile senza la query che non ha funzionato. Quindi voglio avere qualcosa come: "Query 3 failed ('SELECT ...'): 'ERROR MESSAGE'"
.
Com'è possibile? Sono in grado di ottenere l'errore corrente nel ciclo con $test->error
, ma non ho nulla come $test->currentsubsequentquery
. Come lo posso fare?
Grazie mille.
Non vedo da nessuna parte dove $ test è definito o nessuno dei metodi che sta chiamando. Impossibile aiutare se non sappiamo cosa sta facendo il tuo codice. – Kyle
$ test = new mysqli ("localhost", "root", "", "testdatabase"); – Shiuyin
Se gli errori SQL sono un possibile risultato previsto, allora stai facendo qualcosa di sbagliato. Stai facendo qualcosa di simile a un client SQL (o terminale) perché hai davvero bisogno di eseguire tante query contemporaneamente? –