[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подключение к БД в шапке сайта
Truthen
Делаю один сайт с нуля. Подключение к базе данных в шапке страницы (т.е. подключение к базе происходит на всех страницах).

if(!isset($cid))
{
$cid = mysqli_connect("p:localhost", "root", "");

if(!$cid || mysqli_connect_errno() || !mysqli_set_charset($cid, "utf8"))
{
$debug_code = "dbc";
include("./includes/error.php");
}

if(isset($_SESSION['account_id']) && isset($_SESSION['server_id']))
{
if(!mysqli_select_db($cid, $server_info[$_SESSION['server_id']]['dbname']))
{
$debug_code = "s_db_sid:" . $_SESSION['server_id'];
include("./includes/error.php");
}
}
}


Считается ли это нормальным (подключаться к БД сразу же, в шапке страницы)? Тем более, что приставка p: должна держать соединение.
inpost
Новички всегда подключают в самом начале, так проще не сбиться.
Когда уровень чуть выше, то ты делаешь какую-нибудь функцию-оболочку (класс) стандартного mysqli_query, который не только делает запрос, но и перед запросом открывает соединение, если надо.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
AllesKlar
Truthen
В шапке можно, но код не правильный.
if(!isset($cid))....

Надо полагать, что тут ты хочешь знать, есть ли подключение к базе?
Если попытка создать подключение провалилась, то $cid будет существовать, но будет равен FALSE
Если же ты перейдешь к ООП и будешь использовать
$cid = new mysqli(...)
То ситуация еще более усугубится, т.к. объект будет создан (будет существовать), но поля его будут пусты.
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
var_dump($mysqli);
object(mysqli)[1]
public 'affected_rows' => null
public 'client_info' => null
public 'client_version' => null
public 'connect_errno' => null
public 'connect_error' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'field_count' => null
public 'host_info' => null
public 'info' => null
public 'insert_id' => null
public 'server_info' => null
public 'server_version' => null
public 'stat' => null
public 'sqlstate' => null
public 'protocol_version' => null
public 'thread_id' => null
public 'warning_count' => null

в этом случае у тебя и
if(!$cid)
отработает не верно.

Да, тебя спасут дальнейшие проверки, но для чего писать заведомо нерабочий участок кода?
Смотри всегда, что возвращает вызываемая тобой функция, и если она возвращает логическое false, то и проверять нужно на соответсвие типу
if(! isset($cid) || $cid === false)
// для данного случая можно упростить
if( empty($cid) )


_____________
[продано копирайтерам]
Truthen
inpost , вот-вот, именно об этом я и думал, что может стоило бы сделать так. Просто не стал заморачиваться, запрос все равно по идее чуть ли не на каждой странице будет.

AllesKlar, неа. Это код из инклуда database.php. Вроде бы сделал так, чтобы не было проблем, если случайно два раза подключу инклуд. Переменная $cid у меня как бы зарезервирована под подключение к БД.
AllesKlar
Truthen
ну, грабли твои, и наступать на них или нет - дело твое.

_____________
[продано копирайтерам]
inpost
Truthen
Получишь на этом ты копейки, это итак факт. Вопрос в том, нужны ли тебе эти копейки сейчас? Конечно же, если начинать новый проект, то ничего не мешает сразу писать более оптимально(!), но раз уже существует проект, то переписывание его может лишь навредить. Растраты на оптимизацию будут больше, чем выгода с этой оптимизации. wink.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Игорь_Vasinsky
Цитата
Делаю один сайт с нуля

user posted image

user posted image

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
stump
РНР 4.х юзаешь? Переходи уже на 5.х. Последняя версия 5.6.

Вообще надо отделять уровни: уровень приложения, уровень бд...

_____________
Трус не играет в хокей
Invis1ble
Цитата (stump @ 30.05.2015 - 10:57)
РНР 4.х юзаешь?
stump
Цитата (Invis1ble @ 30.05.2015 - 12:48)
Цитата (stump @ 30.05.2015 - 10:57)
РНР 4.х юзаешь?

В РНР 5+ работает ООП, а подключение в шапке это на РНР 4.х похоже.

_____________
Трус не играет в хокей
AllesKlar
stump
У него подключение не в шапке, а в голове

_____________
[продано копирайтерам]
Invis1ble
Цитата
В РНР 5+ работает ООП, а подключение в шапке это на РНР 4.х похоже.


причём тут шапка к версии php и к ООП/не ООП? что ты несешь вообще?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Truthen
Цитата (stump @ 30.05.2015 - 11:57)
РНР 4.х юзаешь? Переходи уже на 5.х. Последняя версия 5.6.

Вообще надо отделять уровни: уровень приложения, уровень бд...

php 5.3.27
Я не знаю, как вы поняли "шапку". Я имел ввиду в самом начале каждой страницы инклуд с подключением к БД. ООП не использую, только процедурный стиль (по крайней мере, пока что), т.к. перешел на php с более простого языка, где ООП нет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.