PHP 8.1 změnilo zpracování SQL chyb, ve striktním režimu nově vyvolá výjimku

Až do PHP 8.0 bylo nastaveno výchozí reportování chyb mysqli_report() na stav MYSQLI_REPORT_OFF. To se změnilo s příchodem PHP 8.1.0, kde je výchozí nastavení kombinace MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT. Autoři PHP se tak rozhodli kvůli tomu, že databázové chyby jsou častý problém, které ovlivňuje běh webových aplikací – nyní se tedy programátoři webů budou muset poprat se všemi chybami.

Rozdíl mezi nastavím lze popsat následovně:

MYSQLI_REPORT_OFF

  • Kód: mysqli_report(MYSQLI_REPORT_OFF);
  • Defaultní nastavení v PHP 8.0 a starší.
  • Nepodporuje zpracování výjimek.
  • SQL dotaz $result = mysqli_query(…) v případě SQL chyby vrátí stav, který si, pokud chcete, musíte sami odchytit a zpracovat v podmínce if (!$result) { … }. Pokud nic neuděláte, běh aplikace bude pokračovat.

MYSQLI_REPORT_ERROR

  • Kód: mysqli_report(MYSQLI_REPORT_ERROR);
  • Nepodporuje zpracování výjimek.
  • SQL dotaz $result = mysqli_query(…) v případě SQL chyby automaticky vyvolá chybový stav E_WARNING v rámci PHP. Běh aplikace pokračuje.
  • Chybový stav můžete zpracovat pomocí set_error_handler().

MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT

  • Kód: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  • Defaultní nastavení v PHP 8.1 a novější.
  • Podporuje zpracování výjimek.
  • Pokud v rámci try { … } odchytáváte výjimky při provádění SQL dotazu $result = mysqli_query(…), tak případnou vyvolanou výjimku (např. SQL chybu) můžete sami zpracovat v catch { … } a běh aplikace bude pokračovat.
  • Pokud v rámci try { … } výjimky neodchytáváte, tak se automaticky zavolá chybový stav E_ERROR a běh aplikace se ukončí. Chybový stav můžete zpracovat pomocí register_shutdown_function().

Dále ještě existuje stav MYSQLI_REPORT_INDEX, který hlásí chybu nebo nepoužití indexu. Je součástí stavu MYSQLI_REPORT_ALL, který kombinuje MYSQLI_REPORT_ERROR a MYSQLI_REPORT_INDEX.

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..