Ogni metodo di mysqli può fallire. Dovresti testare ogni valore restituito. Se uno fallisce, pensa se ha senso continuare con un oggetto che non è nello stato in cui ti aspetti che sia. (Potenzialmente non in uno stato "sicuro", ma penso che non sia un problema qui.)
Poiché per connessione/istruzione viene memorizzato solo il messaggio di errore relativo all'ultima operazione, potresti perdere informazioni su cosa ha causato l'errore se si continua dopo che qualcosa è andato storto. Potresti voler utilizzare queste informazioni per consentire allo script di decidere se riprovare (solo un problema temporaneo), modificare qualcosa o salvare completamente (e segnalare un bug). E rende il debug molto più semplice.
$stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)");
// prepare() can fail because of syntax errors, missing privileges, ....
if ( false===$stmt ) {
// and since all the following operations need a valid/ready statement object
// it doesn't make sense to go on
// you might want to use a more sophisticated mechanism than die()
// but's it's only an example
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$rc = $stmt->bind_param('iii', $x, $y, $z);
// bind_param() can fail because the number of parameter doesn't match the placeholders in the statement
// or there's a type conflict(?), or ....
if ( false===$rc ) {
// again execute() is useless if you can't bind the parameters. Bail out somehow.
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$rc = $stmt->execute();
// execute() can fail for various reasons. And may it be as stupid as someone tripping over the network cable
// 2006 "server gone away" is always an option
if ( false===$rc ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->close();
Solo poche note sei anni dopo...
L'estensione mysqli è perfettamente in grado di segnalare operazioni che generano un codice di errore (mysqli) diverso da 0 tramite eccezioni, vedere mysqli_driver::$report_mode
.
die()
è davvero, davvero grezzo e non lo userei più nemmeno per esempi come questo.
Quindi, per favore, togli solo il fatto che tutti (mysql) operazione can fallire per una serie di motivi; anche se la stessa identica cosa è andata bene mille volte prima....