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

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 то нагрузка будет меньше.
Или же не так?
 
1.
global $numqueries,$link,$debug,$ugamela_root_path;
Очень плохо. Данная функция - явно не тот случай, когда нужно описывать обращение к стольким глобальным переменным.


2.
require($ugamela_root_path.'config.php');
Обычно файл конфигурации инклюдится 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.
Я думаю если использовать функцию doquery то нагрузка будет меньше.
Или же не так?
Совсем не так.

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