За последние 24 часа нас посетил 17391 программист и 1261 робот. Сейчас ищет 1501 программист ...

Правильно закрыть соединение с БД

Тема в разделе "PHP и базы данных", создана пользователем Arnika, 29 апр 2020.

  1. Arnika

    Arnika Новичок

    С нами с:
    29 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    PHP:
    1.    MYSQL_HOST,
    2.    MYSQL_BENUTZER,
    3.    MYSQL_KENNWORT,
    4.    MYSQL_DATENBANK
    5.    ) or die("Error " . mysqli_error($link));
    6.  
    7. ... много чего происходит ...
    8.  
    9. if(условие){
    10.    что-то происходит;
    11.    exit;
    12.  
    13. }
    14. else {
    15.    происходит то что нужно;
    16.  
    17. }
    18. mysqli_close($link);
    У меня вот такой кусочек кода. Правильно ли я понимаю, что если внутри if стоит exit;, то после этого mysqli_close уже не происходит?
    Нужно ли переписать так:
    PHP:
    1.    MYSQL_HOST,
    2.    MYSQL_BENUTZER,
    3.    MYSQL_KENNWORT,
    4.    MYSQL_DATENBANK
    5.    ) or die("Error " . mysqli_error($link));
    6.  
    7. ... много чего происходит ...
    8.  
    9. if(условие){
    10.    что-то происходит;
    11.    mysqli_close($link);
    12.    exit;
    13.  
    14. }
    15. else {
    16.    происходит то что нужно;
    17.    mysqli_close($link);
    18. }
    Спасибо! :)
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Arnika, нет не нужно. Соединение закрывается автоматически после того как скрипт отработал. Т.е. сразу после exit() соединение закроется автоматически.
    Закрывать соединение считается правилом хорошего тона при написании кода.
    Особенно когда код объёмный, после того как получены все необходимые данные из БД и перед тем как происходит их дальнейшая обработка на уровне РНР соединение желательно закрыть.

    Другое дело, что exit() это в основном для отладки кода (если не юзаешь дебаггер) и в реальном приложении его быть не должно.
     
    #2 Valick, 29 апр 2020
    Последнее редактирование: 29 апр 2020
    Arnika нравится это.
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.840
    Симпатии:
    651
    Можно и переписать. У нас, например, когда нужно сделать выход при открытом соединении, пишут что-то вроде prepare_for_exit(). Смысл в том, чтобы не раскидывать mysqli_close() по коду, а делать закрытие соединения в одном предопределенном месте. Вот пример «жирного» контроллера с кодом «prepare for exit» (реализован в виде двух команд $r0[...]=...): https://gency.ru/comment/69 (обработка перехода по этой ссылке – пример работы контроллера; на этом форуме тоже используется подобный контроллер).

    P.S. Как выше написали, «сборщик мусора» должен нормально сработать и без того, но «правилом хорошего тона» является явное закрытие, освобождение и т.п. всего, что вы используете, тем более что у пыха есть определенные проблемы со сборкой мусора.
     
    Arnika нравится это.
  4. Arnika

    Arnika Новичок

    С нами с:
    29 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    большое спасибо!
     
  5. Arnika

    Arnika Новичок

    С нами с:
    29 апр 2020
    Сообщения:
    3
    Симпатии:
    0
    А как тут закрывать тему?
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Никак. Закрывать темы это моветон.