New question

Question:

Date: 23-05-2019 09:24:00 (In Spanish)

Warning: PDO::prepare(): SQLSTATE[00000]: No error: PDO constructor was not called in...[Unresolved]

Muy buenos días.

Tengo un problema al usar PDO para hacer un insert a una tabla.
La versión que uso de PHP es la 7.2.
Esta forma de hacerlo la uso desde hace un tiempo y me funciona sin problemas, pues no sé porque ahora me presenta este problema.
Lo más curioso es que si hago un select lo hace sin problemas.

Voy a poner el código PHP por partes:
1. SQL donde hago el insert :
require_once("core/models/class.Conexion.php"); 

class Registros { 

    private $con; 
    public function __construct(){ 

        $this->con = new Conexion(); 
    } 

    public function Registrar_Asistencia($identificacion){ 
            try{ 
                $query = $this->con->prepare('INSERT INTO asistencia (identificacion_mie) values (?)'); 
                $query->bindParam(1,$identificacion); 
                $query->execute(); 
                $this->con->close_con(); 
            } catch(PDOException $e){ 
                echo  $e->getMessage(); 
             } 
        }  


2. Clase que hace la Conexión a la base de datos:
class Conexion extends PDO { 
    private $database; 
    private $host; 
    private $dbuser; 
  private $dns; 
    private $pass; 
    //private $port; 
  private $dbh; 

    public function __construct(){ 
        try{ 
            $db_cfg = require_once("config/database.php"); 
      $this->dns = $db_cfg["dns"]; 
      $this->database    =$db_cfg["database"]; 
            $this->host     =$db_cfg["host"]; 
          $this->dbuser        =$db_cfg["user"]; 
            $this->pass        =$db_cfg["pass"]; 
          //$this->tipo_de_base.':host='.$this->host.';dbname='.$this->nombre_de_base, $this->usuario, $this->contrasena 
      $this->dbh = parent::__construct($this->dns.':host='.$this->host.';dbname='.$this->database, $this->dbuser, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES  \'UTF8\'')); 

        } catch(PDOException $e){ 
             echo  $e->getMessage(); 
         } 
    } 

    //función para cerrar una conexión pdo 
    public function close_con(){ 
         $this->dbh = null; 
     } 
}  


3. Database.php: $db_cfg = require_once("config/database.php");
return array( 
  "dns"       =>"mysql", 
  "host"      =>"localhost", 
  "user"      =>"root", 
  "pass"      =>"", 
  "database"  =>"asistencia_avivamiento_bd", 
);  


y por ultimo es una tabla con tres campos en la que solo le estoy guardando la identificacion de tipo varchar. los otros campos pueden estar vacíos.

El Error me sale en esta línea:
$query = $this->con->prepare('INSERT INTO asistencia (identificacion_mie) values (?)');

y en esta otra :
Fatal error: Uncaught Error: Call to a member function bindParam() on null in 


Gracias por sus ayudas y orientación.
Tags: MySQL - PHP - PHP PDO Votes: 0 - Answers: 3 - Views: 11 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 28-05-2019 05:37:37 No veo por qué necesitas extender PDO... yo te recomendaría o bien usarlo directamente o al menos tenerlo como una propiedad de la clase Conexión...

    Me temo que el problema está en que estás confundiendo la propiedad $dbh con el propio objeto $con...

    ¿Por qué mejor no usas un ORM?
      Votes: 0 - Link answer
     
  • Date: 29-05-2019 10:31:11 Será que en " $query->bindParam(1,$identificacion);" falta el tipo ? algo asi como:
    $query->bindParam("s", $identificacion); // si es que es string, o i, si es integer ?... porque no se si va el 1...
      Votes: 0 - Link answer
     
  • Date: 30-05-2019 07:05:09 Gracias por responder.
    En las consultas preparadas, no hay necesidad de diferenciar el tipo de dato.
    Pues es muy raro lo que me sucede.
    pues esto mismo lo tengo en otra clase y funciona, así que lo que hice fue llevarme esta misma consulta a esa clase y ahí si me funciona... Quería tener los insert en una clase y los select en otra...
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com