Определить количество обращений к БД MySQL

Статус
В этой теме нельзя размещать новые ответы.
Ох и намучался я с этой функцией! Но зато заработало. Заменил все mysql_query на profile_mysql_query после чего в функциях прописал:
PHP:
$query_counter = 0;
$global_sql_profile_html = "";
function profile_mysql_query($sql){
global $query_counter;
global $global_sql_profile_html;
$query_counter ++;
$global_sql_profile_html = "Запросов: {$query_counter} ";
return mysql_query($sql);
}
Ну и соответственно в подвал скрипта прописал и заработало!
PHP:
print ' '.$global_sql_profile_html;
Кому интересно можете использовать :)
 
  • Заблокирован
  • #12
Поздравляю! Именно через такие маленькие победы происходят левел-апы :)
У вас все хорошо, кроме двух вещей:
1) Сообщение "Запросов: NN" у вас генерируется с КАЖДЫМ запросом к базе. Не лучше ли будет
PHP:
$query_counter = 0;
function profile_mysql_query($sql){
	global $query_counter;
	$query_counter ++;
	return mysql_query($sql);
}
...
print 'Запросов: '.$query_counter;
2) Если вдруг понадобится работать более чем с одной БД, надо будет малость расширить функцию, добавив идентификатор соединения с базой:
PHP:
// Где-то в самом начале
$query_counter = 0;
// Цепляемся к базе и запоминаем идентификатор соединения
$connection = mysql_connect ($host, $user, $pass);
// Обычно мы не указываем его при mysql_query (идет вторым параметром), 
// т.к. по умолчанию используется последнее созданное
// соединение с базой.

// Но что, если какая-то часть скрипта откроет новое
// соединение с другой базой?...
// Предположим, тут инициализируем форум, потому что у нас юзеры 
// в нем хранятся и надо проверить полномочия
include "smf/SSI.php";
// Все, форум отработал, но идентификатор соединения с БД уже 
// другой, и чтобы нам снова выполнить запрос к своей базе, 
// придется использовать заготовленный $connection
profile_mysql_query($sql, $connection);

...

function profile_mysql_query($sql, $connection = null){
	global $query_counter;
	$query_counter ++;
	return mysql_query($sql, $connection);
}
Такие дела :)
 
Сообщение "Запросов: NN" у вас генерируется с КАЖДЫМ запросом к базе.

Что вы имеете ввиду и чем это чревато? Будет некорректно считать? И тот код который предложили вы - он что сделает?
P.S. Просто в данный момент все работает и я не знаю какой код выбрать :nezn:
 
  • Заблокирован
  • #14
Что вы имеете ввиду и чем это чревато? Будет некорректно считать?
Ээээ... я не хочу зубоскалить, но - вы все же попытайтесь разобраться, как у вас код работает. На деле это ПОКА ничем не чревато, но нужно же стремиться писать более хорошие программы, верно? :) Итак, еще раз:

СТРОЧКА "Запросов к базе - стока-то" у вас генерируется в каждом запросе к базе. Зачем? Пусть функция, которая делает запросы, этим и занимается (и заодно считает их), а всякие оформительские штучки должны находиться в шаблонах. Чтобы показать, чем это чревато в теории, давайте доведем ситуацию до абсурда.

Предположим, чуть позже вы захотите не только считать запросы к базе, но еще и в зависимости от количества по разному показывать эту информацию. Если больше 30 на одной странице - желтым цветом, если больше 50 - красным. Если больше 100 - отправлять себе письмо "Помогите погибаю! ААА!"

По вашей нынешней логике (в смысле, по логике приведенной функции) все эти вычисления надо будет делать каждый раз, когда происходит запрос к базе. Т.е. первые 10 запросов скрипт поместит в $global_sql_profile_html просто строчку, следующие 20 будет писать туда что-то типа "<div style="color:yellow">ОГO! УЖЕ {$query_counter} </div>", а потом каждый раз начнет вам отправлять по одному письму на запрос :) И все это в функции, единственное реальное назначение которой - вытаскивать данные из базы.

Надеюсь, вы поняли мою мысль, к сожалению, было лишних 10 минут, чтобы развить ее :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху