За последние 24 часа нас посетили 18470 программистов и 1607 роботов. Сейчас ищет 881 программист ...

Знатоки,нужна помощь

Тема в разделе "PHP и базы данных", создана пользователем maksweb, 10 июн 2014.

  1. maksweb

    maksweb Новичок

    С нами с:
    10 июн 2014
    Сообщения:
    4
    Симпатии:
    0
    Вечер добрый,не могу понять что делать с базой. В двух словах есть такое:

    function linkDB() {
    $link = mysqli_connect(HOST,USER,PASS,DB) or die("Не удалось подключится к базе данных");
    mysqli_query($link,"SET NAMES 'UTF8'") or die('Не удалось установить кодировку');
    return $link;
    }

    И сам mysqli_query:

    function catalogMenuIndex() {
    $query = "SELECT brand_id,brand_name,parent_id FROM brands ORDER BY parent_id,brand_id";
    $res = mysqli_query(linkDB(),$query) or die('Выбор не прошол - критическая ошибка');
    //Массив категорий
    $catalogMenuIndex = array();
    while($row = mysqli_fetch_assoc($res)) {
    if(!$row['parent_id']) {
    $catalogMenuIndex[$row['brand_id']][] = $row['brand_name'];}
    else {
    $catalogMenuIndex[$row['parent_id']]['sub'][$row['brand_id']] = $row['brand_name'];
    }
    }
    //Освобождаем память
    mysqli_free_result($res);
    return $catalogMenuIndex;
    }

    Интересует одно,как обойтись без каждого раза вызова функции. Или же как ведет себя php с функциями? то есть он держит результат выполнения или при каждом вызове - идет в функцию и выполняет. Не навредит ли это памяти.
    P.S -Сильно не ругать,что не так!
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Конечно же будет создаваться новое соединение при каждом вызове linkDB. Для сохранения какого-либо результата в функции, нужно объявить статичную переменную. Идея соединения через функцию такая:
    Код (PHP):
    1. function linkDB() {
    2.   static $link;
    3.   if (empty($link)) {
    4.     $link = mysqli_connect(HOST,USER,PASS,DB) or die("Не удалось подключится к базе данных");
    5.     mysqli_query($link,"SET NAMES 'UTF8'") or die('Не удалось установить кодировку');
    6.   }
    7.   return $link;
    8. } 
     
  3. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    На крайняк - создать статическую переменную в функции catalogMenuIndex или глобальную - вне ее, записать в нее результат вызова linkDB() и пользоваться.