Всеки метод на mysqli може да се провали. Трябва да тествате всяка връщана стойност. Ако някой се провали, помислете дали има смисъл да продължите с обект, който не е в състоянието, в което очаквате да бъде. (Потенциално не е в „безопасно“ състояние, но мисля, че това не е проблем тук.)
Тъй като само съобщението за грешка за последната операция се съхранява за връзка/изявление, може да загубите информация за какво причини грешката, ако продължите, след като нещо се обърка. Може да искате да използвате тази информация, за да позволите на скрипта да реши дали да опита отново (само временен проблем), да промени нещо или да се спаси напълно (и да докладва за грешка). И това прави отстраняването на грешки много по-лесно.
$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();
Само няколко бележки шест години по-късно...
Разширението mysqli е напълно способно да отчита операции, които водят до (mysqli) код за грешка, различен от 0 чрез изключения, вижте mysqli_driver::$report_mode
.
die()
е наистина, наистина груб и не бих го използвал дори за примери като този вече.
Така че, моля, премахнете само факта, че всеки и всеки (mysql) операция може неуспех поради редица причини; дори ако точно същото нещо вървеше добре хиляди пъти преди....