0

我正在学习 OOP 和 PDO。我非常愚蠢,因此陷入了这个错误。你们有什么感想?。

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

DatosLibros.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();
  }

  }
  ?>
4

1 回答 1

1

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

于 2013-10-29T21:13:07.443 回答