За последние 24 часа нас посетили 22752 программиста и 1308 роботов. Сейчас ищут 933 программиста ...

После mysqli_connect() не работает код

Тема в разделе "PHP для новичков", создана пользователем Bayan, 14 фев 2024.

Метки:
  1. Bayan

    Bayan Гость

    С нами с:
    14 фев 2024
    Сообщения:
    1
    Симпатии:
    0
    Всем привет, я специально ввел неправильные данные для подключения, чтобы проверить как код отлавливает ошибки:
    PHP:
    1. $db = mysqli_connect($host, $name, $password, $dbName) or die('<p>Error connection</p>');
    Я пробовал и другие методы:
    PHP:
    1. $db = mysqli_connect($host, $name, $password, $dbName) ;
    2. if (!$db){
    3.     echo"<p>Error connection</p>";
    4. }
    5. else{
    6.     echo"<p style='color:green;'>Succes connection<p>";
    7. }
    И ничего из этого не работает( У меня просто показывает пустую страницу. Кто-нибудь подскажет как ловить такие ошибки подключения
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.084
    Симпатии:
    1.239
    Адрес:
    там-сям
    https://phpfaq.ru/debug

    для начала смотри не на страницу, а на её html код. ну и логи
    --- Добавлено ---
    mysqli_report()используй чтобы контролировать как и какие ошибки будут проявляться
    всегда начинай с чтения официальных доков, а не с форумов. https://www.php.net/manual/ru/mysqli.construct.php
     
  3. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    276
    Симпатии:
    21
    Код (Text):
    1. var_dump($db);die();
    напишите и смотрите что там, т.к. странно, должно работать
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Добрый день!
    У Вас в PHP отключён error_reporting. Отключил здесь для наглядности
    PHP:
    1. <?
    2. $db = mysqli_connect($host, $name, $password, $dbName) or die('<p>Error connection</p>');
    3. ?>
    Показывает пустую страницу, а тут включил
    PHP:
    1. <?
    2. $db = mysqli_connect($host, $name, $password, $dbName) or die('<p>Error connection</p>');
    3. ?>
    Показывает
    Удачи!
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.084
    Симпатии:
    1.239
    Адрес:
    там-сям
    Владимир, тот код, что топикстартер отлаживает, подразумевает, что при ошибке сработает его die('текст ошибки'). Этого не происходит, потому что уровень mysqli_report() настроен так, что он генерит исключение, я так думаю. А скрипт ожидает что просто функция вернет пустой ответ (т.е. false) без какого-либо паразитного вывода.

    Это такой популярный прием из 2000-х, пришедший наверное из PEARL
    PHP:
    1. $var = func() or die('message');
    благодаря низкому приоритету операции or, конструкция die() сработает ТОЛЬКО если результат функции может трактоваться как "ложь", т.е. это false, null, 0, '0' или [ ].
    А так как большинство функций mysqli возвращают false при ошибке, то оно работает. Но есть нюанс — уровень mysqli_report() !

    Поэтому в данном контексте я советую где-то в конфигурации указать mysqli_report(0); и тогда код будет работать как ожидалось.

    PHP:
    1. <?php
    2.  
    3. $host = 'localhost';
    4. $name = 'I know';
    5. $password = 'it is wrong credentials';
    6. $dbName = 'test';
    7.  
    8. $db = mysqli_connect($host, $name, $password, $dbName) or die('<p>Error connecti>
    9. echo "-- OK\n";
    выдаст на страницу
    Код (Text):
    1. <p>Error connection</p>
     
    #5 artoodetoo, 15 фев 2024
    Последнее редактирование: 15 фев 2024
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Я проверял в моём тесте с error_reporting(0) на OSPanel, PHP 8.1
    Выдаёт пустую страницу.
    Проверил там же Ваш тест
    PHP:
    1. <?php
    2. $host = 'localhost';
    3. $name = 'I know';
    4. $password = 'it is wrong credentials';
    5. $dbName = 'test';
    6. $db = mysqli_connect($host, $name, $password, $dbName) or die('<p>Error connect</p>');
    7. echo "-- OK\n";
    8. ?>
    Выдаёт пустую страницу, а с error_reporting(1);
     
    #6 Vladimir Kheifets, 15 фев 2024
    Последнее редактирование: 15 фев 2024
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.084
    Симпатии:
    1.239
    Адрес:
    там-сям
    я тоже проверял прежде чем выложить. вы менч озадачили
    --- Добавлено ---
    добавил в код явный вызов mysqli_report(0). а то получилось что словами написал, а в примере не показал. сорри!