/** * Execute sql query. * * @param string $sql * @return \mysqli_result */ public function query($sql) { $mysqliResult = mysqli_query($this->conn, $this->getSqlWithPrefix($sql)); if (!$mysqliResult) { echo '<pre><h4 class="text-danger">MySQL Error:</h4>' . $this->conn->errno . ': ' . $this->conn->error . '<h5>Query</h5>' . $this->getSqlWithPrefix($sql) . '<h5>Debug backtrace</h5>' . debug_backtrace_html() . '</pre>'; } return $mysqliResult; }
/** * Обработчик ошибок PHP * Сигнатура метода совпадает с требованиями PHP * * @param integer $errno Код ошибки * @param string $errfile Файл в котором происходит ошибка * @param string $errline Строка в которой была ошибка * @param string $errcontext Контекст в котором произошла ошибка */ public function handler($errno, $error_msg, $errfile = NULL, $errline = NULL, $errcontext = NULL, $backtrace = NULL) { // Если вывод ошибок включен if (!self::$OUTPUT) { return NULL; } // Если не передан стек вызовов получим текущий if (!isset($backtrace)) { $backtrace = debug_backtrace(FALSE); } // Если сообщение установлено if (!isset($error_msg) || $error_msg == 'Undefined' || !isset($error_msg[0])) { return FALSE; } // Указатель на "правильный" уровень стека вызовов if (isset($backtrace[1])) { $callee =& $backtrace[1]; } // Если ошибка вызывается из функции то укажем ее if (isset($callee['function'])) { $error_msg = '<u>' . $callee['function'] . '()</u> ' . $error_msg; } // Если ошибка вызывается из класса то укажем его if (isset($callee['class'])) { $error_msg = '<u>' . $callee['class'] . '</u>::' . $error_msg; } // Если не передан файл где была ошибка if (!isset($errfile)) { $errfile = isset($callee['file']) ? $callee['file'] : ''; } // Если не передана линия где была ошибка if (!isset($errline)) { $errline = isset($callee['line']) ? $callee['line'] : ''; } // Сформируем стек вызовов для разбора ошибки $error_msg = debug_backtrace_html($error_msg, $backtrace); // Описание типа $error_type = ''; // CSS класс ошибки $error_css = ''; // Определим описание типа ошибки switch ($errno) { case E_ERROR: $error_type = 'Фатальная ошибка'; $error_css = '_core_fatal_error'; break; case E_CORE_ERROR: $error_type = 'Ошибка ядра PHP'; $error_css = '_core_fatal_error'; break; case E_SAMSON_FATAL_ERROR: $error_type = 'Фатальная ошибка SamsonPHP'; $error_css = '_core_fatal_error'; break; case E_SAMSON_SNAPSHOT_ERROR: $error_type = 'Ошибка создания отпечатка SamsonPHP'; break; case E_SAMSON_RENDER_ERROR: $error_type = 'SamsonPHP rendering error'; break; case E_PARSE: $error_type = 'Ошибка парсинга'; $error_css = '_core_fatal_error'; break; case E_COMPILE_ERROR: $error_type = 'Ошибка компиляции'; $error_css = '_core_fatal_error'; break; case E_USER_ERROR: $error_type = 'Пользовательская ошибка'; break; case E_WARNING: $error_type = 'Предупреждение'; break; case E_CORE_WARNING: $error_type = 'Предупреждение ядра PHP'; break; case E_COMPILE_WARNING: $error_type = 'Предупреждение компиляции'; break; case E_USER_WARNING: $error_type = 'Пользовательское предупреждение'; break; case E_NOTICE: $error_type = 'Замечание'; break; case E_USER_NOTICE: $error_type = 'Пользовательское замечание'; break; case E_STRICT: $error_type = 'Строгая ошибка'; break; case E_RECOVERABLE_ERROR: $error_type = 'Востанавливаемая ошибка'; break; case E_DEPRECATED: $error_type = 'Использование устаревших данных'; break; case E_USER_DEPRECATED: $error_type = 'Старая функция'; break; case E_SAMSON_CORE_ERROR: $error_type = 'Ошибка SamsonPHP'; break; case E_SAMSON_ACTIVERECORD_ERROR: $error_type = 'Ошибка ActiveRecord'; break; case E_SAMSON_CMS_ERROR: $error_type = 'Ошибка SamsonCMS'; break; case D_SAMSON_DEBUG: $error_type = 'Отладка SamsonPHP'; $error_css = '_core_debug'; break; case D_SAMSON_CMS_DEBUG: $error_type = 'Отладка SamsonCMS'; $error_css = '_core_debug'; break; case D_SAMSON_ACTIVERECORD_DEBUG: $error_type = 'Отладка ActiveRecord'; $error_css = '_core_debug'; break; default: $error_type = 'Неизвестная ошибка'; } // Сформируем ошибку в виде массива $this->errors[] = $this->toError($errno, $error_type . ':', $error_msg, $errfile, $errline, $error_css); // Если это фатальная ошибка - остановим выполнение скрипта if ($errno == E_SAMSON_FATAL_ERROR) { die; } }