aInstance[$sDSNKey])) { return $this->aInstance[$sDSNKey]; } else { /** * Если такого коннекта еще не было то создаём его */ $oDbSimple=DbSimple_Generic::connect($sDSN); /** * Устанавливаем хук на перехват ошибок при работе с БД */ $oDbSimple->setErrorHandler('databaseErrorHandler'); /** * Если нужно логировать все SQL запросы то подключаем логгер */ if (Config::Get('sys.logs.sql_query')) { $oDbSimple->setLogger('databaseLogger'); } /** * Устанавливаем настройки соединения, по хорошему этого здесь не должно быть :) * считайте это костылём */ $oDbSimple->query("set character_set_client='utf8'"); $oDbSimple->query("set character_set_results='utf8'"); $oDbSimple->query("set collation_connection='utf8_bin'"); /** * Сохраняем коннект */ $this->aInstance[$sDSNKey]=$oDbSimple; /** * Возвращаем коннект */ return $oDbSimple; } } public function GetStats() { $aQueryStats=array('time'=>0,'count'=>-3); foreach ($this->aInstance as $oDb) { $aStats=$oDb->_statistics; $aQueryStats['time']+=$aStats['time']; $aQueryStats['count']+=$aStats['count']; } $aQueryStats['time']=round($aQueryStats['time'],3); return $aQueryStats; } } /** * Функция хука для перехвата SQL ошибок * * @param string $message * @param unknown_type $info */ function databaseErrorHandler($message, $info) { /** * Записываем информацию об ошибке в переменную $msg */ ob_start(); echo "SQL Error: $message
\n"; print_r($info); $msg=ob_get_contents(); ob_end_clean(); /** * Если нужно логировать SQL ошибке то пишем их в лог */ if (Config::Get('sys.logs.sql_error')) { /** * Получаем ядро */ $oEngine=Engine::getInstance(); /** * Меняем имя файла лога на нужное, записываем в него ошибку и меняем имя обратно :) */ $sOldName=$oEngine->Logger_GetFileName(); $oEngine->Logger_SetFileName(Config::Get('sys.logs.sql_error_file')); $oEngine->Logger_Error($msg); $oEngine->Logger_SetFileName($sOldName); } /** * Если стоит вывод ошибок то выводим ошибку на экран(браузер) */ if (error_reporting()) { exit($msg); } } /** * Функция логгирования SQL запросов * * @param object $db * @param unknown_type $sql */ function databaseLogger($db, $sql) { /** * Получаем информацию о запросе и сохраняем её в переменной $msg */ $caller = $db->findLibraryCaller(); ob_start(); print_r($sql); $msg=ob_get_contents(); ob_end_clean(); /** * Получаем ядро и сохраняем в логе SQL запрос */ $oEngine=Engine::getInstance(); $sOldName=$oEngine->Logger_GetFileName(); $oEngine->Logger_SetFileName(Config::Get('sys.logs.sql_query_file')); $oEngine->Logger_Debug($msg); $oEngine->Logger_SetFileName($sOldName); } ?>