我正在学习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();
}
}
?>
答案 0 :(得分:1)
你需要在ejecutar($ strComando)之前调用conectar()