как посчитать колличество запросов в бд?

Тема в разделе "PHP", создана пользователем Juri, 23 окт 2008.

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

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    есть самописный скрипт, как подсчитать сколько запросов в бд он делает во время исполнения.

    заранее благодарен
     
  2. sw04

    sw04 seoplayer

    Регистр.:
    1 дек 2007
    Сообщения:
    601
    Симпатии:
    193
    Все запросы пускать через функцию.
    Создаешь фукнцию
    PHP:
    function mysql($sql){
    $count++;
    result mysql_query($sql);
    }
    И каждый запрос осуществляешь через него.
    Моменты:
    1. каунтер можно держать в $_SESSION
    2. надо учесть защиту от sql инъекций(в приведенной функции защиты нед)
     
    Juri нравится это.
  3. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    что то не въехал, можно какой-нибудь пример с готовым запросом который будет считаться через эту функцию.
     
  4. Crazy108

    Crazy108 Создатель

    Регистр.:
    6 сен 2008
    Сообщения:
    45
    Симпатии:
    7
    session_start();
    $_SESSION['queryCount'] = 0;

    function getQuery($sql)
    {
    $_SESSION['queryCount']++;
    return $sql;
    }

    вдоль всего кода SQL запросы делаеш посредством вызова getQuery($sql)

    В данном примере специально сделана функция как промежуточная и прозрачная для чистоты работы счетчика
     
  5. DIAgen

    DIAgen Постоялец

    Регистр.:
    30 окт 2006
    Сообщения:
    134
    Симпатии:
    72
    Вот давно писал класс для работы с базой данных.

    PHP:
    class MySQL_class {
        
        public 
    $dblink null;
        public 
    $result = array ();
        public 
    $count_query 0;
        public 
    $error_MySQL null;
        public 
    $query_sql = array();
        
        public function 
    __construct() {

            
    $this->dblink = @mysql_pconnect db_hostdb_usernamedb_password );
            if (
    $this->dblink && mysql_select_db db_database )) {
                if (
    version_compare mysql_get_server_info (), '4.1'">=" ))
                    
    mysql_query '/*!40101 SET NAMES "utf-8" */' );
                    
    mysql_query 'set character_set_connection=utf8' );
                    
    mysql_query 'set character_set_client=utf8' );
                    
    mysql_query 'set character_set_results=utf8' );
                    
            } else {
                die ( 
    'Ошибка при подключении к базе данных, эта ошибка может быть вызвана не правильными данными для подключения к базе данных, или на данный момент база данных не работает. Приносим свои извинения.');
            }
        }

        public function 
    query($sql_query$id_query 'main') {
            
            if(
    is_array($sql_query)) {
                foreach (
    $sql_query as $sql_query_id) {
                    
    $result mysql_query $sql_query_id$this->dblink );
                }
                return 
    true;
            }
            
    $result mysql_query $sql_query$this->dblink );
            if (!
    $result) {
                if (
    debug) {
                    
    $this -> error_MySQL .= '<pre><br>' mysql_error () . '<br>' $sql_query '<br></pre>';
                }
                return 
    false;
            } else {
                
    $this -> query_sql [] = $sql_query;
                
    $this->result [$id_query] = $result;
                
    $this -> count_query $this -> count_query 1;
                return 
    true;
            }        
        }
        
        function 
    fetch_object($id_query 'main') {

            if (
    $this->result [$id_query]) {
                
    $this->dbrow mysql_fetch_object ($this->result[$id_query]);
                return 
    $this->dbrow;
            }
            
        }
    }
    Вот пример

    PHP:
    $MySQL_class = new MySQL_class();
    $MySQL_class ->query "select * base" );    
    while ( 
    $base_result $MySQL_class ->fetch_object () ) {
    // Чего то делаем тут
    }
    После всех выполнений можно вывести информацю так
    PHP:
    echo 'Количество SQL запросов ' $MySQL_class -> count_query '<br>';
        if(!empty(
    $MySQL_class -> error_MySQL)) {
            echo 
    'Ошибки при выполнении SQL ' $MySQL_class -> error_MySQL '<br>';
        }
        foreach (
    $MySQL_class -> query_sql as $query_sql) {
            echo 
    $query_sql '<br>';
        }
     
    Juri нравится это.
Статус темы:
Закрыта.