sql >> Databáze >  >> RDS >> Mysql

MySQLi připravilo zprávy o chybách

Každá metoda mysqli může selhat. Měli byste otestovat každou návratovou hodnotu. Pokud jeden selže, zamyslete se nad tím, zda má smysl pokračovat s objektem, který není ve stavu, v jakém očekáváte, že bude. (Potenciálně ne v "bezpečném" stavu, ale myslím, že to zde není problém.)

Protože pro připojení/příkaz je uložena pouze chybová zpráva pro poslední operaci, můžete ztratit informace o tom, co způsobil chybu, pokud budete pokračovat poté, co se něco pokazilo. Možná budete chtít použít tyto informace k tomu, aby se skript rozhodl, zda to zkusit znovu (pouze dočasný problém), něco změnit nebo úplně vypomoci (a nahlásit chybu). A to značně usnadňuje ladění.

$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();

Jen pár poznámek o šest let později...

Rozšíření mysqli je dokonale schopné hlásit operace, jejichž výsledkem je chybový kód (mysqli) jiný než 0 prostřednictvím výjimek, viz mysqli_driver::$report_mode .
die() je opravdu, ale opravdu hrubý a už bych ho nepoužil ani pro příklady, jako je tento.
Takže prosím, berte jen to, že každý (mysql) operace může selhat z řady důvodů; i když přesně to samé se povedlo tisíckrát předtím...



  1. toto je chyba ORA-12154:TNS:Nelze vyřešit zadaný identifikátor připojení?

  2. Jak používáte proměnné skriptu v psql?

  3. SQL dotazy

  4. Jak získat rok z data v T-SQL