Соединение с MySQLi не видно внутри функции

VANHALEN

Новичок
Долбаный MySQLi по своим новым правилам требует, чтобы вначале любого запроса параметром стоял как его там называют "идентификатор подключения".
который у меня вот
PHP:
$db_connect = mysqli_connect($db_host, $db_user_name, $db_password, $db_name);
Так вот я подключился, всё зашибись и ниже пара функций. Так вот внутри функций этого $db_connect не видать. Выношу за пределы функции - всё видно, а внутри нет. Спрашваю вот так вот к примеру
PHP:
$content = mysqli_query($db_connect, "SELECT * FROM `content` ORDER BY `id` ASC");
Что не так? Внутри функции видна и работает только тогда, когда я её вызываю $GLOBALS['db_connect'].
Давно не практиковался. Когда был старый MySQL всё работало и так.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я нифига не понял, код не рабочий можно?
 

VANHALEN

Новичок
PHP:
    $db_connect = mysqli_connect($db_host, $db_user_name, $db_password, $db_name);
    if(!$db_connect) {echo 'Не могу соединиться с базой данных';}
    mysqli_set_charset($db_connect, "utf8");

function view() {
    $content = mysqli_query($db_connect, "SELECT * FROM `content` ORDER BY `id` ASC");
    while ($row = mysqli_fetch_array($content))
    {
       
    }
}  
view();
Вот так вот не работает. Не видит переменной $db_connect
А работает только так. Я сам допёр, что её нужно взять из глобальных
PHP:
    $db_connect = mysqli_connect($db_host, $db_user_name, $db_password, $db_name);
    if(!$db_connect) {echo 'Не могу соединиться с базой данных';}
    mysqli_set_charset($db_connect, "utf8");

function view() {
    $content = mysqli_query($GLOBALS['db_connect'], "SELECT * FROM `content` ORDER BY `id` ASC");
    while ($row = mysqli_fetch_array($content))
    {
       
    }
}  
view();
 

Denchik

Новичок
Вам надо соединение передавать как параметр в фунцию view. Т.е. function view($db_connect){........} иначе она и не увидит внешнюю переменную.
Ну или использовать объектный стиль программирования.
А фокусы с $GLOBALS - по-моему, это не хорошо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Надо перечитать про области видимости переменных, давно не кодил, сразу видно.
 

VANHALEN

Новичок
Вам надо соединение передавать как параметр в фунцию view. Т.е. function view($db_connect){........} иначе она и не увидит внешнюю переменную.
Да, как вариант отлично подошло. На 5 php и и старом mysql и без этого отлично работало. Спасибо!
 

Squats

Новичок
До исторически сложилось, что для приглашения в функцию нужно использовать global или использовать супер-глобальный массив $_GLOBALS, тогда использовать global для приглашения уже не нужно.
У функции локальная область видимости.
И ей не доступно, то, что не пригласили через глобальные массивы и/или конструкции, а также через аргументы.
Ну это значит, что у вас уже, что-то не то со структурой, раз уже приходится использовать global.
 

Фанат

oncle terrible
Команда форума
у тебя совсем-совсем нигде не чешется, когда функция для вывода данных в браузер требует соединение с БД?

Может быть все-таки сделать две функции, одна работает с БД, а вторая выводит данные, которые ей передали?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
у тебя совсем-совсем нигде не чешется, когда функция для вывода данных в браузер требует соединение с БД?

Может быть все-таки сделать две функции, одна работает с БД, а вторая выводит данные, которые ей передали?
Ок, бумер
 

Denchik

Новичок
у тебя совсем-совсем нигде не чешется, когда функция для вывода данных в браузер требует соединение с БД?

Может быть все-таки сделать две функции, одна работает с БД, а вторая выводит данные, которые ей передали?
По-моему это максимально просто, быстро и эффективно. Нет никакого оверхеда, лишних обёрток и и т.п. фокусов, которые только забирают процессорное время и память.
Кстати, в приведенном выше примере функция не требует соединения с БД, оно выше, вне её.
 

Denchik

Новичок
требует
ты просто не понимаешь, что такое соединение
Возможно не понимаю.
Для меня: mysqli_connect() — устанавливает соединение с работающим сервером MySQL и она вне функции, а возвращает объект, представляющий подключение к серверу MySQL;
 

Denchik

Новичок
Просто != Правильно
Это общие слова.
Человек задал конкретный вопрос - я постарался помочь без лишней софистики.
Как бы вы переписали код ТС, максимально сохранив быстродействие?
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я бы не переписывал ни за кем код, мне за это не платят. А это "быстродействие", это сколько милисекунд? 2-3? 10?
 

Denchik

Новичок
Я бы не переписывал ни за кем код, мне за это не платят. А это "быстродействие", это сколько милисекунд? 2-3? 10?
Даже, если 1мс. Для некоторых приложений, приближенных к режиму реального времени это может быть существенно. А вообще из-за таких кирпичиков и складывается общее быстродействие приложения. И не всегда применение MVC оправдано. Зачем лишний раз усложнять и придумывать какие-то надстройки?
А вообще только Просто == Просто
Всё вышесказанное - лишь моё мнение.
 

Фанат

oncle terrible
Команда форума
Я бы не переписывал ни за кем код, мне за это не платят. А это "быстродействие", это сколько милисекунд? 2-3? 10?
откуда у тебя там миллисекунды взялись?
В миллисекундах общее время выполнения скрипта считается, а не разница в 10 опкодов.
 
Сверху