Ahora me surge otro problema en cuanto a herencia de métodos y atributos de clases:
Teno una clase Log que guarda excepciones en un archivo y la clase Database hereda todo sobre él, y a su vez creo un objeto sesion que toma los métodos de Database para ejecutar las consultas, y éste me guarda las excepciones en el archivo log, pero en una validación que tengo no me muestra el mensaje de error en la página.
Database.class.php
Código PHP:
Ver original<?php
require_once('core/classes/log.class.php');
class Database
extends Log{
private static $host = ''/*DB_HOST*/;
private static $user = ''/*DB_USER*/;
private static $pass = ''/*DB_PASS*/;
protected $dbname = ''/*DB_NAME*/;
protected $stmt;
protected $charset = '';
private $db;
public function __construct($host, $user, $pass, $dbname, $charset = 'utf8'){
self::$host = $host;
self::$user = $user;
self::$pass = $pass;
$this->dbname = $dbname;
$this->charset = $charset;
// Set DSN
$dsn = 'mysql:host=' . self::$host . ';dbname=' . $this->dbname . ';charset=' . $this->charset;
// Set options
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
try{
$this->db = new PDO($dsn, self::$user,self::$pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->elog($e);
$this->setException($e);
}
}
private function close(){
$this->db = NULL;
}
protected function getList($query, $flag){
$this->query($query);
$rows = $this->resultset($flag);
return $rows;
}
protected function query($query){
$this->stmt = $this->db->prepare($query);
}
protected function bind($param, $value, $type = null){
switch (true) {
$type = PDO::PARAM_INT;
break;
$type = PDO::PARAM_BOOL;
break;
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
protected function execute(){
try{
return $this->stmt->execute();
}catch(PDOException $e){
$this->elog($e);
$this->setException($e);
}
}
protected function fetchColumn(){
try{
$this->execute();
return $this->stmt->fetchColumn();
}catch(PDOException $e){
$this->elog($e);
$this->setException($e);
}
}
protected function resultset($flag = false){
try{
$this->execute();
if($flag === true){
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}else{
return $this->stmt->fetchAll();
}
}catch(PDOException $e){
$this->elog($e);
$this->setException($e);
}
}
protected function single(){
try{
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}catch(PDOException $e){
$this->elog($e);
$this->setException($e);
}
}
protected function rowCount(){
return $this->stmt->rowCount();
}
protected function lastInsertId(){
return $this->db->lastInsertId();
}
protected function beginTransaction(){
return $this->db->beginTransaction();
}
protected function endTransaction(){
return $this->db->commit();
}
protected function cancelTransaction(){
return $this->db->rollBack();
}
protected function debugDumpParams(){
return $this->stmt->debugDumpParams();
}
}
?>
Log.class.php
Código PHP:
Ver original<?php
protected $statusEx = false;
protected $getCode;
protected $getMessage;
protected $msj = array();
protected function eLog(Exception $e){
fwrite($fo,"[".date("r")."] " .$e->getTraceAsString(). "\r\n" . $e->getMessage()); }
protected function setException(Exception $e){
$this->getCode = $e->getCode();
$this->getMessage = $e->getMessage();
$this->statusEx = true;
}
public function getException(){
$this->msj[] = '<div class="alert alert-error">
Error número: ' .$this->getCode. '</br>
Mensaje: '.$this->getMessage.'</div></br>';
return $this->msj;
}
public function getStatus(){
return $this->statusEx;
}
}
?>
init.php
Código PHP:
Ver originalrequire 'classes/sesion.class.php';
require 'classes/general.php';
require 'classes/bcrypt.php';
$sesion = new Sesion();
sesion.class.php
Código PHP:
Ver original<?php
require_once('core/connect/database.class.php');
class Sesion extends Database{
public function __construct(){
$this->db = new Database('127.0.0.1', 'root', '', 'lar');
}
}
?>
en la página login.php tengo esto:
Código PHP:
Ver originalif($sesion->getStatus() == true){
echo implode($sesion->getException()); }
Antes si me mostraba el mensaje, pero ahora ya no, y lo necesito para controlar lo mejor posible los errores mientras termino el proyecto.