За последние 24 часа нас посетили 22596 программистов и 1595 роботов. Сейчас ищут 893 программиста ...

Cтандартная ошибка БД

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 24 янв 2017.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте.
    Скопировал пример подключения к БД отсюда: 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)
    Почему так?
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    https://php.ru/manual/mysqli-driver.report-mode.html
    PHP:
    1. mysqli_report(MYSQLI_REPORT_STRICT);
    2.  
    3. try {
    4.      $connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
    5. } catch (Exception $e ) {
    6.      echo "Service unavailable";
    7.      echo "message: " . $e->getMessage();   // not in live code obviously...
    8.      exit;
    9. }
     
    SamyRed нравится это.
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    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
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Я поправил $e->getMessage()
     
    SamyRed нравится это.
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Даже если это будет работать. Почему не работает пример из официального справочника?
    --- Добавлено ---
    Ок, спасибо, работает. Но всё же, что не так с официальной документацией? Ведь там есть вывод ошибок, но они выводятся не так
    --- Добавлено ---
    Фу ты, блин, ссылка в первом сообщении не та. php.ru переправил её. Там php.net
     
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну например взять официальную документацию mysqli_connect_error(),там в примерах следующее
    PHP:
    1. $mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db');
    2.  
    3. // Работает в версиях PHP 5.2.9 и 5.3.0.
    4. if ($mysqli->connect_error) {
    5.     die('Connect Error: ' . $mysqli->connect_error);
    6. }
    Процедурный

    PHP:
    1. <?php
    2. $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db');
    3.  
    4. if (!$link) {
    5.     die('Connect Error: ' . mysqli_connect_error());
    6. }
    7. ?>
     
    #6 alexblack, 24 янв 2017
    Последнее редактирование: 24 янв 2017
    SamyRed нравится это.
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ye вот та страница, ссылку на которую я в шапке указал, поменяй там php.ru на php.net. Это, я так понимаю, оффициальная документация. Оттуда я копировал. И не работает:
    PHP:
    1. <?php
    2. $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
    3.  
    4. /*
    5.  * Это "официальный" объектно-ориентированный способ сделать это
    6.  * однако $connect_error не работал вплоть до версий PHP 5.2.9 и 5.3.0.
    7.  */
    8. if ($mysqli->connect_error) {
    9.  die('Ошибка подключения (' . $mysqli->connect_errno . ') '
    10.  . $mysqli->connect_error);
    11. }
    12.  
    13. /*
    14.  * Если нужно быть уверенным в совместимости с версиями до 5.2.9,
    15.  * лучше использовать такой код
    16.  */
    17.  die('Ошибка подключения (' . mysqli_connect_errno() . ') '
    18. }
    19.  
    20. echo 'Соединение установлено... ' . $mysqli->host_info . "\n";
    21.  
    22. $mysqli->close();
    23. ?>
     
  8. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Просмотрел документацию,stackoverflow,конкретных причин почему это происходит не называется,и в самой документации на других тематических страницах только то,как предотвратить вывод подобной ошибки.
     
    SamyRed нравится это.
  9. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну ок. И на этом спасибо.