Už druhý den stojím nad naprosto hloupým problémem, nedaří se mi odchytnout ošetřit chybu při spojení na DB přes mysqli v PHP7 (na Debianu)
V hlavním programu mám nastaven vlastní error_handler i exception_handler. Při každé chybě, nebo neošetřené výjimce zapíše záznam do logu a přeruší program. Potud je vše OK.
V následujícím fragmentu třídy se snažím potlačit chybu při chybě spojení a vyhodit vlastní - k tomu nikdy nedojde, protože se vyvolá E_WARNING už na prvním řádku.
if (!@$this->sqli->real_connect($server, $uzivatel, $heslo, $databaze))
{
//trigger_error('Selhalo připojení k SQL serveru, chyba '.$this->sqli->connect_errno.': '.$this->sqli->connect_error, E_USER_ERROR);
die('Connect Error ('.mysqli_connect_errno().') '.mysqli_connect_error());
}
Nedaří se to ošetřit ani přes výjimky. Přepnu mysqli na vyvolávání výjimek a spojím se v bloku try-catch. Sice se vyhodí mysqli_sql_exception, ale zachytím ji až v hlavním programu a ne v tomto bloku.
mysqli_report(MYSQLI_REPORT_STRICT);
try
{
@$this->sqli->real_connect($server, $uzivatel, $heslo, $databaze);
}
catch (mysqli_sql_exception $e)
{
echo 'Zachyceno OK';
die('hello');
}
Fakt už nevidím, kde dělám chybu :-(