Здравствуйте. Скопировал пример подключения к БД отсюда: https://php.ru/manual/mysqli.construct.html (Самый первый пример). Я так понял, предпологается что при ошибке будет выводиться это сообщение: 'Ошибка подключения (' . $mysqli->connect_errno . ') '. $mysqli->connect_error, но вместо этого выводится стандартная ошибка PHP: Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'my_user'@'localhost' (using password: YES) in /home/samyred/NetBeansProjects/fastweb/engine/db.php on line 3 Ошибка подключения (1045) Access denied for user 'my_user'@'localhost' (using password: YES) Почему так?
https://php.ru/manual/mysqli-driver.report-mode.html PHP: mysqli_report(MYSQLI_REPORT_STRICT); try { $connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ; } catch (Exception $e ) { echo "Service unavailable"; echo "message: " . $e->getMessage(); // not in live code obviously... exit; }
Service unavailable Fatal error: Uncaught Error: Cannot access protected property mysqli_sql_exception::$message in /home/samyred/NetBeansProjects/fastweb/engine/db.php:9 Stack trace: #0 /home/samyred/NetBeansProjects/fastweb/index.php(3): require() #1 {main} thrown in /home/samyred/NetBeansProjects/fastweb/engine/db.php on line 9
Даже если это будет работать. Почему не работает пример из официального справочника? --- Добавлено --- Ок, спасибо, работает. Но всё же, что не так с официальной документацией? Ведь там есть вывод ошибок, но они выводятся не так --- Добавлено --- Фу ты, блин, ссылка в первом сообщении не та. php.ru переправил её. Там php.net
Ну например взять официальную документацию mysqli_connect_error(),там в примерах следующее PHP: $mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db'); // Работает в версиях PHP 5.2.9 и 5.3.0. if ($mysqli->connect_error) { die('Connect Error: ' . $mysqli->connect_error); } Процедурный PHP: <?php $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db'); if (!$link) { die('Connect Error: ' . mysqli_connect_error()); } ?>
Ye вот та страница, ссылку на которую я в шапке указал, поменяй там php.ru на php.net. Это, я так понимаю, оффициальная документация. Оттуда я копировал. И не работает: PHP: <?php $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); /* * Это "официальный" объектно-ориентированный способ сделать это * однако $connect_error не работал вплоть до версий PHP 5.2.9 и 5.3.0. */ if ($mysqli->connect_error) { die('Ошибка подключения (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } /* * Если нужно быть уверенным в совместимости с версиями до 5.2.9, * лучше использовать такой код */ if (mysqli_connect_error()) { die('Ошибка подключения (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } echo 'Соединение установлено... ' . $mysqli->host_info . "\n"; $mysqli->close(); ?>
Просмотрел документацию,stackoverflow,конкретных причин почему это происходит не называется,и в самой документации на других тематических страницах только то,как предотвратить вывод подобной ошибки.