Mysql
 sql >> база данни >  >> RDS >> Mysql

Отчитане на грешки в подготвените изявления на MySQLi

Всеки метод на 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) операция може неуспех поради редица причини; дори ако точно същото нещо вървеше добре хиляди пъти преди....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да обърнете реда на символите в низ в MySQL

  2. Възстановяване на изтрития 'root' потребител и парола за MySQL

  3. Научете основни SQL заявки с помощта на MySQL

  4. Как да направя рекурсивната SELECT заявка в MySQL?

  5. В SQL / MySQL каква е разликата между ON и WHERE в изявление за присъединяване?