MySQLi и PHPs error_handler - PullRequest
       2

MySQLi и PHPs error_handler

0 голосов
/ 31 мая 2019

Вот некоторый (упрощенный) код:

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.

Есть идеи, что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...