2013-10-29 88 views
0

我正在学习OOP和PDO。 Iam非常愚蠢,所以陷入了这个错误。你们有什么感想?。致命错误非对象错误

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

    } 
    ?> 
+0

是'conectar()'叫/你肯定'$这个 - > objetoConexion'拥有正确的对象? – kero

+0

尝试var_dump($ this-> objetoConexion);并给我们输出 – sinaneker

回答

1

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

+0

任何人都可以告诉我该怎么写吗?我只是不明白。 – user2928753

+0

@ user2928753你可以发布你使用这个类的代码吗?它看起来像$ this-> objetoConexion是NULL,这就是为什么$ this-> objetoConexion-> prepare($ strComando);失败。 –

+0

完成我的朋友!一探究竟! – user2928753

相关问题