致命错误非对象错误


Fatal error non object error

我正在学习OOP和PDO。我很愚蠢,所以被这个错误卡住了。你们怎么看?.

Fatal error: Call to a member function prepare() on a non-object in /var/www/op/DatosLibros.php on line 35

拿督利布罗斯.php

<?php
class DatosLibros
{ 
    private $cadenaConexion;
    private $user;
    private $password;
    private $objetoConexion;
    public function __construct($cadenaConexion,$user,$password)
    {
         $this->cadenaConexion=$cadenaConexion;
         $this->user=$user;
         $this->password=$password;
    }
    public function conectar ()
    {
        try
        {
            $this->objetoConexion= new PDO ($this->cadenaConexion,$this->user,$this->password);
            $this->objetoConexion->setAttribute(PDO::ATTR_EARMODE,PDO::EARMODE_EXCEPTION);
        }
        catch (PDOException $ex)
        {
            echo "Se ha presentado un problema a la hora de conectar con la base de datos";
        }
    }
    public function desconectar ()
    {
        $this->objetoConexion=null;
    }
    public function ejecutar ($strComando)
    {
        try
        {
            $ejecutar = $this->objetoConexion->prepare($strComando);
            $ejecutar->execute();
            $rows= $ejecutar->fetchAll();
        }
        catch (PDOException $ex)
        {  
            throw $ex;
        }
    } 
} 
?>

错误行:

$ejecutar = $this->objetoConexion->prepare($strComando);

这个使用DatosLibros.php被称为NegociosLibros.php。我只是将这部分添加到你们人们看到它的方式。在这里:

  <?php
  include_once ("DatosLibros.php");
  class capaNegocios
  {
  public $codigo_libro;
  public $nombre_libro;
  public $descripcion_libro;
  public $autor_libro;
  public $categoria_libro;
  public $editorial_libro;
  public $cantidad_libro;
  public $objetoDatos;
  public function __construct($codigo_libro,$nombre_libro,$descripcion_libro,$autor_libro,$categoria_libro,$editorial_libro,$cantidad_libro)
  {
  $this->codigo_libro=$codigo_libro;
  $this->nombre_libro=$nombre_libro;
  $this->descripcion_libro=$descripcion_libro;
  $this->autor_libro=$autor_libro;
  $this->categoria_libro=$categoria_libro;
  $this->editorial_libro=$editorial_libro;
  $this->cantidad_libro=$cantidad_libro;
  $this->objetoDatos=new DatosLibros ('mysql:host=localhost;dbname=b','root','');
  }
   public function insertar()
   {
   try
   {
   $this->objetoDatos->conectar();
   $this->objetoDatos->ejecutar("insert into libros(codigo_libro,nombre_libro,descripcion_libro,categoria_libro,editorial_libro,cantidad_libro) values('$this->codigo_libro','$this->nombre_libro','$this->descripcion_libro','$this->autor_libro','$this->categoria_libro','$this->editorial_libro','$this->cantidad_libro')");
  $this->objetoDatos->desconectar();
   }
   catch (PDOException $ex)
   {
   throw $ex;
    }
   }  
   public function eliminar()
   {
   $this->objetoDatos->conectar();
   $this->objetoDatos->ejecutar("delete from libros where codigo_libro=$this->codigo_libro");
   $this->objetoDatos->desconectar();
   }
   public function modificar()
   {
   $this->objetoDatos->conectar();
   $this->objetoDatos->ejecutar("update libros set cantidad_libro='$this->cantidad_libro' where codigo_libro=$this->codigo_libro)");
   $this->objetoDatos->desconectar();
   }
   public function mostrar()
   {
   $this->objetoDatos->conectar();
   $fila->$this->objetoDatos->ejecutar("select * from libros where codigo=$this->codigo");
   foreach($fila as $filaActual){
   echo "Codigo del Libro: ",$filaActual [codigo_libro],"<br/>Nombre del Libro:",$filaActual [nombre_libro],"<br/>Descripcion:",$filaActual [descripcion_libro],"<br/>Autor:",$filaActual [autor_libro],"<br/>Categoria:",$filaActual [categoria_libro],"<br/>Editorial:",$filaActual [editorial_libro],"<br/>Cantidad de libros:",$filaActual [cantidad_libro];
   echo "</br>";
    }
  $this->objetoDatos->desconectar();
  }
  }
  ?>

你需要在 ejecutar($strComando) 之前调用 conectar()