Помогите сделать функцию. Типа doquery

Тема в разделе "Базы данных", создана пользователем Sashak, 28 сен 2011.

Модераторы: latteo
  1. Sashak

    Sashak Создатель

    Регистр.:
    8 дек 2008
    Сообщения:
    25
    Симпатии:
    0
    Здравствуйте.
    Пишу свою цмс, знакомые посоветовали выполнять запросы функцией
    PHP:
    function doquery($query$table$fetch false){
     global 
    $numqueries,$link,$debug,$ugamela_root_path;
     require(
    $ugamela_root_path.'config.php');

     if(!
    $link)
     {
    $link mysql_connect($dbsettings["server"], $dbsettings["user"], 
     
    $dbsettings["pass"]) or
     
    $debug->error(mysql_error()."<br />$query","SQL Error");

     
    mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");
     
    mysql_query("SET NAMES cp1251");
     echo 
    mysql_error();}

     
    $sql str_replace("{{table}}"$dbsettings["prefix"].$table$query);
     
    $sqlquery mysql_query($sql) or 
     
    $debug->error(mysql_error()."<br />$sql<br />","SQL Error");

     unset(
    $dbsettings);
     
    $numqueries++;
     
    $arr debug_backtrace();
     
    $file end(explode('/',$arr[1]['file']));
     
    $line $arr[1]['line'];
     
    $debug->add("<tr><th>Query $numqueries: </th><th>$query</th><th>$file($line)</th><th>$table</th><th>$fetch</th></tr>");

     if(
    $fetch)
     {
    $sqlrow mysql_fetch_array($sqlquery);
     return 
    $sqlrow;
     }else{return 
    $sqlquery;}}
    Сам запрос

    PHP:
    $CurrentPlanet doquery("SELECT * FROM {{table}} WHERE `id` = '"$user['current_planet'] ."';"'planets'true);
    Помогите пожалуйста поправить функцию дабы было без инклюда конфига.
    Или подскажите аналог функции.
    Сейчас я использую

    PHP:
    $bd_users_cont mysql_query("SELECT * FROM `users_cont` WHERE `id`='".$all_id."'");
    $users_cont mysql_fetch_assoc($bd_users_cont);
                        
    $u_email $users_cont['email'];
    Заранее благодарен.

    Я думаю если использовать функцию doquery то нагрузка будет меньше.
    Или же не так?
     
  2. Soul :)

    Soul :) Постоялец

    Регистр.:
    22 мар 2007
    Сообщения:
    86
    Симпатии:
    9
    1.
    Очень плохо. Данная функция - явно не тот случай, когда нужно описывать обращение к стольким глобальным переменным.


    2.
    Обычно файл конфигурации инклюдится 1 раз в файле, который генерит страницу (index.php / admin.php /...) и инклюдится ровно 1 раз: require_once. Но его точно стоит вынести из тела функции.

    3. Также, не так редко для ЦМС-ок создаются глобальные объекты текущего пользователя и объекта БД, которые и описываются через global в нужных функциях.


    4. $numqueries - может сделать статичной переменной?

    5. смысл этой строчки мне категорически не ясен:
    PHP:
     unset($dbsettings);
    6. кажись, довольно тяжелая операция:
    PHP:
     $arr debug_backtrace();
    зачем ее дергать каждый раз?

    7.
    PHP:
     $line $arr[1]['line'];
    $line = __LINE__;
    ???


    8.
    Совсем не так.

    Мне кажется, Вам будет полезно посмотреть в сторону какого-нибудь ПХП-фреймворка и/или PDO, чтобы посмотреть, как там работают с базами данных.