/** * Constuctor de la clase. * * @author Cody Roodaka <*****@*****.**> * @param string $query Consulta SQL. * @param mixed $conn Conección al servidor MySQL. */ public function __construct($query, $conn) { PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); $this->query = mysql_query($query, $conn); if ($this->query === FALSE) { throw new Database_Exception(mysql_error($conn) . ' (error ' . mysql_errno($conn) . ')', mysql_errno($conn)); } PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); }
/** * Realiza una actualización en la base de datos. * @param string $query Consulta SQL. * @param array $params Arreglo con los parametros a reemplazar. * @return bool|int False cuando se produce un error, el numero de filas * afectadas si fue correcto. * @author Cody Roodaka <*****@*****.**> * @throws Database_Exception */ public function update($query, $params = array()) { if ($this->is_connected()) { $query = $this->parse_query($query, $params); PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); $rst = mysql_query($query, $this->conn); PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); if ($rst === TRUE) { // Si fue correcto devolvemos las filas afectadas. return mysql_affected_rows(); } else { // Generamos una excepción. throw new Database_Exception("Error al ejecutar la consulta: '" . mysql_error() . "'", mysql_errno()); // Devolvemos falso para indicar que no fue correcto. return FALSE; } } else { throw new Database_Exception('No hay una conección a la base de datos establecida.', 102); return FALSE; } }
/** * Obtenemos los datos para visualizar un suceso. * @param array|Model_Suceso $informacion Información de un suceso. * @param string $class Clase para procesar. No debe ser pasado, solo es a fines de compatibilidad de herencias estáticas. * @return array */ public static function procesar($informacion, $class = __CLASS__) { // Verifico que sea arreglo. if (!is_array($informacion)) { $informacion = $informacion->as_array(); } // Limpio prefijos de la clase. $class = substr($class, 5); // ID de la cache del suceso. $cache_id = 'suceso_data.' . $informacion['id'] . '-' . Usuario::$usuario_id; // Obtenemos elemento a partir de la cache. $data = Cache::get_instance()->get($cache_id); // Verificamos si existe. if ($data === FALSE) { // Verificamos si existe. if (is_callable($class . '::suceso_' . $informacion['tipo'])) { // Procesamos el suceso. $data = call_user_func($class . '::suceso_' . $informacion['tipo'], $informacion); // Guardamos en la cache. Cache::get_instance()->save($cache_id, $data); } else { PRODUCTION || Profiler_Profiler::get_instance()->log("No se puede parsear '{$informacion['tipo']}' en {$class}"); return NULL; } } return $data; }
/** * Consulta que realiza una modificación en la base de datos. * * Son consultas que no devuelven un conjunto de datos, simplemente las * filas afectadas y si es una inserción, el id del posible campo automático. * @param string $query Consulta SQL. * @param array $params Arreglo con los parametros a reemplazar. * @return bool|int False cuando se produce un error, un arreglo con * el id de la inserción y el número de filas afectadas si fue correcto. * @throws Database_Exception */ private function write_query($query, $params = array()) { // Cargamos la consulta. $sth = $this->make_query($query, $params); PRODUCTION || Profiler_Profiler::get_instance()->log_query($sth->queryString); // Realizamos la consulta $rst = $sth->execute(); PRODUCTION || Profiler_Profiler::get_instance()->log_query($sth->queryString); if ($rst) { // Obtenemos el ID. try { $id = (int) $this->dbh->lastInsertId(); } catch (PDOException $e) { // No esta soportado o no es correcto aplicarlo. $id = NULL; } // Devolvemos las filas afectadas. $cols = $sth->rowCount(); return array($id, $cols); } else { // Hubo un problema, generamos la excepción. $err_data = $sth->errorInfo(); throw new Database_Exception("Error ejecutando la consulta: '{$err_data[2]}'", $err_data[0]); return FALSE; } }
/** * Consulta que realiza una modificación en la base de datos. * * Son consultas que no devuelven un conjunto de datos, simplemente las * filas afectadas y si es una inserción, el id del posible campo automático. * @param string $query Consulta SQL. * @param array $params Arreglo con los parametros a reemplazar. * @return bool|int False cuando se produce un error, un arreglo con * el id de la inserción y el número de filas afectadas si fue correcto. * @throws Database_Exception */ private function write_query($query, $params = array()) { // Armamos la consulta. $query = $this->parse_query($query, $params); // Creamos la consulta. if (!($sth = $this->dbh->prepare($query))) { throw new Database_Exception("Error generando la consulta: '{$this->dbh->error}'", $this->dbh->errno); } PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); // Ejecutamos la consulta. if ($sth->execute()) { PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); return array($sth->insert_id, $sth->affected_rows); } else { PRODUCTION || Profiler_Profiler::get_instance()->log_query($query); // Error ejecutando la consulta. throw new Database_Exception("Error ejecutando la consulta: '{$sth->error}'", $sth->errno); return FALSE; } }
/** * Directorio de la cache. */ define('CACHE_PATH', APP_BASE . DS . 'cache'); /** * Directorio de clases de 3ros. */ define('VENDOR_PATH', APP_BASE . DS . 'vendor' . DS); // Cargamos funciones varias. require_once APP_BASE . DS . 'function.php'; // Iniciamos el proceso de carga automatica de librerias. spl_autoload_register('installer_loader_load'); spl_autoload_register('loader_load'); /** * Defino la URL del sitio. */ define('SITE_URL', get_site_url()); // Cargo el tema actual. define('THEME', 'theme'); define('THEME_URL', SITE_URL . VIEW_PATH . THEME); // Inicio logs. Log::setup(APP_BASE . DS . 'log', '%d-%m-%Y.log', PRODUCTION ? Log::INFO : Log::DEBUG); // Iniciamos el manejo de errores. Error::get_instance()->start(DEBUG); // Database profiler. PRODUCTION || Profiler_Profiler::get_instance()->set_query_explain_callback('Database::explain_profiler'); PRODUCTION || Profiler_Profiler::get_instance()->log_memory('Framework memory'); // Cargamos el despachador y damos el control al controlador correspondiente. Installer_Dispatcher::dispatch(); PRODUCTION || Profiler_Profiler::get_instance()->display();