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

Тема в разделе "PHP", создана пользователем Dizeloid, 11 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Dizeloid

    Dizeloid Постоялец

    Регистр.:
    17 июл 2009
    Сообщения:
    68
    Симпатии:
    3
    Подскажите, каким образом подсчитать количество обращений к БД MySQL? Нужно вставить простой код в тело PHP-скрипта, что бы он выводил на странице количество обращений к базе после нажатия F5.
     
  2. Disher

    Disher Постоялец

    Регистр.:
    25 июл 2009
    Сообщения:
    90
    Симпатии:
    8
    Писать свою функцию подсчета. Встроенных функций, решающих такую задачу - нет. Можно посмотреть например, на get_num_queries() в WP
     
  3. Dizeloid

    Dizeloid Постоялец

    Регистр.:
    17 июл 2009
    Сообщения:
    68
    Симпатии:
    3
    Но у меня сайт построен не на движке WordPress.
    Мне тут посоветовали вставить такой код:
    PHP:
    $query_counter 0;
    function 
    mysql_query_counter(){
        global 
    $query_counter;
        
    $query_counter ++;
        return 
    call_user_func_array'mysql_query'func_get_args() );
    }
    но он отказывается работать :(
     
  4. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    "Он отказывается работать"
    Код же не подсобный рабочий, верно? Как он может отказываться?
    Впредь всегда старайтесь писать, что конкретно вы делаете и как именно это не получается.

    По этому фрагменту кода: действительно, в переменной $query_counter будет содержаться количество обращений к базе данных, ЕСЛИ вы все вызовы mysql_query замените на mysql_query_counter.

    Неудобно? Еще бы! Именно поэтому такие общие места, как работа с базой, надо помещать в собственные обертки (функции или объекты - неважно), которые при необходимости можно изменить изнутри, а снаружи для всех остальных частей программы они будут выглядеть и работать как прежде (называется этот великолепный кунштюк "инкапсуляция").
     
  5. Dizeloid

    Dizeloid Постоялец

    Регистр.:
    17 июл 2009
    Сообщения:
    68
    Симпатии:
    3
    Я наверное не понимаю того что вы пишите.:nezn:
    Хочу уточнить - существует ли способ путем вставки в тело PHP файла определить колличество обращений к БД? Вот например как это происходит со временем формирования страницы:
    PHP:
    <?php
        $fts 
    explode(' ' microtime());
        
    $sec_ts $fts[1] - $sts[1];
        
    $msec_ts $fts[0] - $sts[0];
        
    $time_ts $sec_ts $msec_ts;
        print 
    FILE_INDEX_TIME_CREATE_PAGE $time_ts ' sec';
    ?>
    Есть что нибудь такое же простое и доступное?
    Боюсь показать идиотом но вы имеете ввиду это? Или я чего то не понимаю :thenks:
    PHP:
    $query_counter 0;
    function 
    mysql_query_counter(){
        global 
    $query_counter;
        
    $query_counter ++;
        return 
    call_user_func_array'mysql_query_counter'func_get_args() );
    }  
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    посмотри внимательно как у тебя функция называется и что она возвращает :D:D:D
     
  7. POGRAN

    POGRAN Читатель

    Заблокирован
    Регистр.:
    26 май 2008
    Сообщения:
    5
    Симпатии:
    0
    Да просто добать счётчик в функцию, которая осуществляет запрос к бд.
    А в конце страницы выведи конечное состояние счётчика - это и будет кол-во запросов к бд на одну страницу.
     
  8. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Чтобы можно было просто в начале и конце поставить метки - такого нет.
    Да. Давайте разберемся, что делает эта функция.
    PHP:
    $query_counter 0;
    Объявляем счетчик. Это надо делать где-то в самом начале скрипта, не в функции, таким образом, переменная окажется в глобальной области видимости.
    PHP:
    function mysql_query_counter(){
        global 
    $query_counter;
        
    $query_counter ++;
    Эта функция сначала импортирует в себя счетчик, потом увеличивает его на единицу. Затем она непосредственно осуществляет запрос к базе с помощью стандартной функции mysql_query, передавая ей параметры, с которыми была запущена сама.
    Т.е. mysql_query_counter() - это такой имитатор mysql_query(), который делает все то же самое, только заодно считает. Следовательно и пользоваться им надо точно так же.
    PHP:
    $result mysql_query_counter("SELECT * FROM british_science_news WHERE news_id = 11079")
    Следовательно, придется все mysql_query менять на новую функцию. Это если у вас голые mysql_query используются, конечно. Так это или нет, расскажите, и дальше видно будет, что делать.
     
  9. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Уйней страдаете господа..Вы забыли про айпи.
    На запрос идет фильтр query. Пишите простой плагин, в него засовываете обработчик этого фильтра, в нем делаете тупо подсчет обращений. И все...никакой правки кода...Все делается плагином, вкл/выкл, также можно и показывать эти запросы, разграничивать кто, что видит и прочие вкусности.


    вот вам, навскидку пример такого плагина:
    PHP:
    <?php
    /*
    Plugin Name: TostRss
    Plugin URI: http://nulled.ws/
    Description: Counter for mysql querys.
    Version: 1.0.0
    Author: TostRss
    Author URI: http://nulled.ws/
    */
    add_filter('query''count_query'1);
    function 
    count_query($query){
        global 
    $count_query;
        
    $count_query++;
        return 
    $query;
    }
    ?>
     
  10. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    tostrss :read:
     
Статус темы:
Закрыта.