Вот некоторый (упрощенный) код:
function error_handler($errno, $errstr, $errfile, $errline){
$mysqli_log = new mysqli('host', 'user', 'pass', 'db');
$mysqli_log->query("INSERT INTO logging (log, lognr) VALUES ('" . $errno . "', '" . $errstr . "')");
return TRUE;
}
set_error_handler("error_handler", E_ALL);
$mysqli_master = new mysqli("123.456.789.123", "user123", "password123", "my_db"));
var_dump($mysqli_master);
для тестирования я ввел неверные данные для соединения $ mysqli_master.
с отключенным set_error_handler () я получаю ожидаемый доход от var_dump () .. примерно так:
('connect_errno' и 'connect_errno' установлены)
object(mysqli)#1 (19) {
["affected_rows"]=> NULL
["client_info"]=> NULL
["client_version"]=> int(50012)
["connect_errno"]=> int(1130)
["connect_error"]=> string(68) "Host '....' is not allowed to connect to this MySQL server"
["errno"]=> NULL
["error"]=> NULL
["error_list"]=> NULL
["field_count"]=> NULL
["host_info"]=> NULL
["info"]=> NULL
["insert_id"]=> NULL
["server_info"]=> NULL
["server_version"]=> NULL
["stat"]=> NULL
["sqlstate"]=> NULL
["protocol_version"]=> NULL
["thread_id"]=> NULL
["warning_count"]=> NULL
с включенным set_error_handler () я получаю следующее:
object(mysqli)#1 (19) {
["affected_rows"]=> NULL
["client_info"]=> NULL
["client_version"]=> int(50012)
["connect_errno"]=> int(0)
["connect_error"]=> NULL
["errno"]=> NULL
["error"]=> NULL
["error_list"]=> NULL
["field_count"]=> NULL
["host_info"]=> NULL
["info"]=> NULL
["insert_id"]=> NULL
["server_info"]=> NULL
["server_version"]=> NULL
["stat"]=> NULL
["sqlstate"]=> NULL
["protocol_version"]=> NULL
["thread_id"]=> NULL
["warning_count"]=> NULL
}
каким-то образом соединение mysqli внутри функции обработчика ошибок перезаписывает соединение $ mysqli_master.
Есть идеи, что здесь происходит?