¿Por que aparece error “Constant expression contains invalid operations” en clase conexion usando PDO en PHP?

publicado por: Anonymous

Poseo la siguiente clase conexión orientada a objetos con PDO:

Conexion.php:

<?php namespace Models;

$archivo = 'config.ini.php';
$configurar = parse_ini_file($archivo, true);

$host= $configurar['basedatos']['host'];
$user = $configurar['basedatos']['user'];
$pass = $configurar['basedatos']['pass'];
$db = $configurar['basedatos']['dbname'];
$charset = $configurar['basedatos']['charset'];

    class Conexion extends PDO
    {
        private $_datos = array(
            "host" => $host,
            "user" => $user,
            "pass" => $pass,
            "dbname" => $db,
            "charset" => $charset
            );

        protected static $_conexion; /* private $_conexion */

        private function __construct() {
            try 
            {
                self::$_conexion = new PDO("mysql:
                    host=$this->_datos['host'];
                    dbname=$this->_datos['dbname'];
                    charset=$this->_datos['charset']", 
                    $this->_datos['user'], 
                    $this->_datos['pass']);

                self::$_conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    echo "Conexion Exitosa"; 
            }

            catch(PDOException $e)
            {
                echo "Conexion Fallida: " . $e->getMessage();
            }
        }

        public function consultaSimple($sql) {
            $this->_conexion->query($sql);
        }

        public function consultaRetorno($sql) {
            $datos= $this->_conexion;
            return $datos;
        }
    }

Config.ini.php:

<?php return; ?> ; 
[basedatos]
driver="mysql"
host="localhost"
port="3306"
user="root"
pass="" 
db="escuelaCRUD"
charset="utf8" 

El error mostrado es:

Fatal error: Constant expression contains invalid operations in
Conexion.php on line 14

solución

  • Modifique la posicion del codigo para parsear el archivo INI
  • Agregue algunos atributos
  • Agregue el use PDO, para evitar el error de clase global, evite usar en cada PDO

    use PDO;
    class Conexion 
    {
        private $_host;
        private $_user;
        private $_pass;
        private $_dbname;
        private $_charset;
        private $_conexion; /* private $_conexion */
    
        public function __construct() {
            $archivo = 'config.ini.php';
            $configurar = parse_ini_file($archivo, true);
    
            $this->_host = $configurar['basedatos']['host'];
            $this->_user = $configurar['basedatos']['user'];
            $this->_pass = $configurar['basedatos']['pass'];
            $this->_dbname = $configurar['basedatos']['dbname'];
            $this->_charset = $configurar['basedatos']['charset'];
            try 
            {
    
            $this->_conexion = new PDO("mysql:host=$this->_host;
                    dbname=$this->_dbname;
                    charset=$this->_charset", 
                    $this->_user, 
                    $this->_pass);
             $this->_conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    echo "Conexion Exitosa"; 
            }
    
            catch(PDOException $e)
            {
                echo "Conexion Fallida: " . $e->getMessage();
            }
        }
    
        public function consultaSimple($sql) {
            $this->_conexion->query($sql);
        }
    
        public function consultaRetorno($sql) {
            $datos= $this->_conexion;
            return $datos;
        }
    }
    
    $conexion = new conexion();
    
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *