За последние 24 часа нас посетили 26877 программистов и 1483 робота. Сейчас ищет 981 программист ...

Работа с PDO со счетчиком!

Тема в разделе "PHP для новичков", создана пользователем engine.energy, 10 июл 2015.

  1. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Хотел переписать класс Db к PDO со счетчиком. Например сколько был запрос сделано и прочие. Чтобы узнать где находит страница который больше запроса посылает.....

    Выложу код:

    Код (PHP):
    1. <?php
    2.  
    3. namespace Classes\Core;
    4.  
    5. use Classes\Misc\FileSystem;
    6.  
    7. class Db
    8. {
    9.     static protected $_pdo_instance;
    10.  
    11.     /**
    12.      * @return \PDO
    13.      * @throws \Exception
    14.      */
    15.     static public function me()
    16.     {
    17.         if (is_null(self::$_pdo_instance)) {
    18.             if (!class_exists('pdo')) throw new \Exception("Отсутствует драйвер PDO");
    19.  
    20.             $db_settings = System::getProperty('database');
    21.  
    22.             if (array_search($db_settings['driver'], \PDO::getAvailableDrivers()) === false)
    23.                 throw new \Exception(sprintf("Отсутствует %s драйвер PDO", $db_settings['driver']));
    24.  
    25.             switch ($db_settings['driver']) {
    26.                 case 'mysql':
    27.                     self::$_pdo_instance = new \PDO('mysql:host=' . $db_settings['host'] . ';dbname=' . $db_settings['dbname'],
    28.                         $db_settings['user'], $db_settings['pass']);
    29.                     break;
    30.                 case 'sqlite':
    31.                     self::$_pdo_instance = new \PDO('sqlite:' . FileSystem::systempath(ENGINE_DIR . '/database.sqlite'));
    32.                     break;
    33.             }
    34.  
    35.             self::$_pdo_instance->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
    36.             self::$_pdo_instance->query("SET NAMES utf8;");
    37.         }
    38.  
    39.  
    40.         return self::$_pdo_instance;
    41.     }
    42.  
    43.     static public function isConnected()
    44.     {
    45.         return !is_null(self::$_pdo_instance);
    46.     }
    47.  
    48.     protected function __construct()
    49.     {
    50.  
    51.     }
    52. } 
    Добавлено спустя 6 минут 11 секунд:
    Кажись разобралься! Создал новый класс и в нем вызываю ородительский класс PDO и решил проблему!

    Добавлено спустя 11 минут 15 секунд:
    Страно зависает сервер если вызвать запрос

    сделал так но чета он постояно вызывает тот метод а не родителский почему?

    Код (PHP):
    1. <?php
    2.  
    3. namespace Classes\Core;
    4.  
    5. class EnginePDO extends \PDO
    6. {
    7.     protected $countQuery = 0;
    8.  
    9.     public function query($sql) {
    10.         $this->countQuery++;
    11.         return $this->query($sql);
    12.     }
    13. } 
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  3. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    artoodetoo заметил спс=) Забыл о нем!

    Добавлено спустя 1 минуту 40 секунд:
    Кому нужен вот!

    Код (PHP):
    1. <?php
    2.  
    3. namespace Classes\Core;
    4.  
    5. class EnginePDO extends \PDO
    6. {
    7.     public $countQuery = 0;
    8.  
    9.     public function query($sql)
    10.     {
    11.         $this->countQuery++;
    12.         return parent::query($sql);
    13.     }
    14.  
    15.     public function prepare($statement, $driver_options = array())
    16.     {
    17.         $this->countQuery++;
    18.         return parent::prepare($statement, $driver_options);
    19.     }
    20. }