Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Fatal error: Call to a member function prepare() on a non-object in
Autor Mensaje
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #1
Fatal error: Call to a member function prepare() on a non-object in
Soy nuevo en POO y PDO , estoy haciendo un sistema sencillo bibliotecario y ando algo desesperado. Tengo este error:

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;
}
}
}
?>



Esta es la linea del error


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


Este archivo hereda de DatosLibros.php y se llama 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();
}

}
?>

(Este mensaje fue modificado por última vez en: 29-10-2013 23:11 por Atahualpa.)
29-10-2013 20:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rulo Sin conexión
Ultra Nerd Mod
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #2
RE: Fatal error: Call to a member function prepare() on a non-object in
Proba haciendole var_dump o print_r a esta linea.


new PDO ($this->cadenaConexion,$this->user,$this->password)


El error que te tira es que estas llamando un metodo en algo que no es un objeto, por ejemplo, algo que es NULL porque no existe.
Eso indicaría que quizas, estas creando la conexión mal y con los parametros que le pasas a PDO te termina tirando un error.

Fijate que te llega en los parametros que le pasas al constructor. ¿Algo fuera de lo común?

Cita:Absolve me, save my reign
Have you forgotten me?
(Este mensaje fue modificado por última vez en: 30-10-2013 02:18 por rulo.)
30-10-2013 02:16
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #3
RE: Fatal error: Call to a member function prepare() on a non-object in
Lo puse así:


var_dump( new PDO ($this->cadenaConexion,$this->user,$this->password));


Y me da el mismo error.
30-10-2013 10:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Nimix Sin conexión
Secretario de la SAE
Trust me, I'm Engineer
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 423
Agradecimientos dados: 36
Agradecimientos: 272 en 62 posts
Registro en: Apr 2011
Mensaje: #4
RE: Fatal error: Call to a member function prepare() on a non-object in
Da la impresión que $this->objetoConexion está en null cuando lo querés usar. Veo que siempre llamás al conectar() antes de usarlo, con lo que no debería ser eso. Asegurate que cuando intentás conectarte $this->objetoConexion quede instanciado, si no que explote así te das cuentas si el error es ese. Algo así:



<?php
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)
{
die("PDOException: " . $ex->getMessage());
}
catch (Exception $ex)
{
die("Exception: " . $ex->getMessage());
}
}
?>


30-10-2013 10:50
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Nimix recibio 1 Gracias por este post
Atahualpa (30-10-2013)
rulo Sin conexión
Ultra Nerd Mod
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #5
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 10:15)Atahualpa escribió:  Lo puse así:


var_dump( new PDO ($this->cadenaConexion,$this->user,$this->password));


Y me da el mismo error.

La idea es que postees el output que te da hacer:


var_dump($this->cadenaConexion);
var_dump($this->user)
var_dump($this->password);
var_dump( new PDO ($this->cadenaConexion,$this->user,$this->password));
die();


var_dump no hace otra cosa que dumpear la variable, es decir, te la muestra por pantalla en la pagina.
Y die() te mata la ejecucion del script. Es para que puedas ver lo que retornan esas variables, porque suena que te estan llegando en NULL y estas llamando a un metodo en algo que es null.

Cita:Absolve me, save my reign
Have you forgotten me?
(Este mensaje fue modificado por última vez en: 30-10-2013 11:23 por rulo.)
30-10-2013 11:22
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #6
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 11:22)rulo escribió:  
(30-10-2013 10:15)Atahualpa escribió:  Lo puse así:


var_dump( new PDO ($this->cadenaConexion,$this->user,$this->password));


Y me da el mismo error.

La idea es que postees el output que te da hacer:


var_dump($this->cadenaConexion);
var_dump($this->user)
var_dump($this->password);
var_dump( new PDO ($this->cadenaConexion,$this->user,$this->password));
die();


var_dump no hace otra cosa que dumpear la variable, es decir, te la muestra por pantalla en la pagina.
Y die() te mata la ejecucion del script. Es para que puedas ver lo que retornan esas variables, porque suena que te estan llegando en NULL y estas llamando a un metodo en algo que es null.

Me sale lo siguiente:


string(29) "mysql:host=localhost;dbname=b" string(4) "root" string(0) "" Se ha presentado un problema a la hora de conectar con la base de datos
Fatal error: Call to a member function prepare() on a non-object in /var/www/op/DatosLibros.php on line 43


(30-10-2013 10:50)Nimix escribió:  Da la impresión que $this->objetoConexion está en null cuando lo querés usar. Veo que siempre llamás al conectar() antes de usarlo, con lo que no debería ser eso. Asegurate que cuando intentás conectarte $this->objetoConexion quede instanciado, si no que explote así te das cuentas si el error es ese. Algo así:



<?php
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)
{
die("PDOException: " . $ex->getMessage());
}
catch (Exception $ex)
{
die("Exception: " . $ex->getMessage());
}
}
?>



Me aparece esto:

PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
(Este mensaje fue modificado por última vez en: 30-10-2013 17:57 por Atahualpa.)
30-10-2013 17:50
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.356
Agradecimientos dados: 900
Agradecimientos: 887 en 356 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #7
RE: Fatal error: Call to a member function prepare() on a non-object in
o tenes mas el user, el password, o si es correcto, no tenes permisos

[Imagen: v34BEFt.gif]
30-10-2013 18:00
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gonnza recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Nimix Sin conexión
Secretario de la SAE
Trust me, I'm Engineer
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 423
Agradecimientos dados: 36
Agradecimientos: 272 en 62 posts
Registro en: Apr 2011
Mensaje: #8
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 17:50)Atahualpa escribió:  Me aparece esto:

PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

Es esto entonces. Estás intentando autenticarte en el MySQL sin usar password. Buscate en la doc. de PDO para ver cómo cambiar este setting en el componente, ahora me estoy yendo pero viene por acá la mano seguro.
Eso o simplemente no le estás pasando ninguna password al PDO =)
(Este mensaje fue modificado por última vez en: 30-10-2013 18:07 por Nimix.)
30-10-2013 18:06
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Nimix recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #9
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 18:06)Nimix escribió:  
(30-10-2013 17:50)Atahualpa escribió:  Me aparece esto:

PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

Es esto entonces. Estás intentando autenticarte en el MySQL sin usar password. Buscate en la doc. de PDO para ver cómo cambiar este setting en el componente, ahora me estoy yendo pero viene por acá la mano seguro.
Eso o simplemente no le estás pasando ninguna password al PDO =)

Corregido. Ahora me sale esto:

Fatal error: Undefined class constant 'ATTR_EARMODE' in /var/www/op/DatosLibros.php on line 24
30-10-2013 18:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.356
Agradecimientos dados: 900
Agradecimientos: 887 en 356 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #10
RE: Fatal error: Call to a member function prepare() on a non-object in
no existe esa constante de PDO


con todo el amor del mundo:

podrias intentar resolverlo vos y cuando no te salga, recien ahi preguntar, diciendo que hiciste para intentar corregirlo y porque no anda


googleando nada mas las constantes de pdo (al hacer pdo::X usas la constante x)

esta el listado de constantes

http://php.net/manual/en/pdo.constants.php


la que queres usar (infiero) se llama ATTR_ERRMODE, la escribiste mal

[Imagen: v34BEFt.gif]
30-10-2013 18:16
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gonnza recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #11
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 18:16)gonnza escribió:  no existe esa constante de PDO


con todo el amor del mundo:

podrias intentar resolverlo vos y cuando no te salga, recien ahi preguntar, diciendo que hiciste para intentar corregirlo y porque no anda


googleando nada mas las constantes de pdo (al hacer pdo::X usas la constante x)

esta el listado de constantes

http://php.net/manual/en/pdo.constants.php


la que queres usar (infiero) se llama ATTR_ERRMODE, la escribiste mal

Muchas gracias. Si ya me habia dado cuenta. Solo que pongo los mensajes de error en este tema para ganar tiempo mientras busco por google.

Me salió este:

SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
30-10-2013 18:24
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 posts
Registro en: May 2008
Mensaje: #12
RE: Fatal error: Call to a member function prepare() on a non-object in
$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')");


Tenes 6 columnas y 7 valores

Aunque sea les los mensajes de error?

A nadie le gusta laburar por otro gratis...
30-10-2013 18:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] brunodiaz recibio 2 Gracias por este post
Atahualpa (30-10-2013), gonnza (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #13
RE: Fatal error: Call to a member function prepare() on a non-object in
Gracias. Casualmente estaba viendo esto pensando que era el problema pero tienes razón.
http://htmlfixit.com/cgi-tutes/tutorial_..._Count.php

Que inutil me siento. Parece que me tengo que graduar de pelotudo.

Muchas gracias a todos por tomarse la molestia de ayudarme.

Un abrazo.
30-10-2013 19:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 posts
Registro en: May 2008
Mensaje: #14
RE: Fatal error: Call to a member function prepare() on a non-object in
A todos nos cuesta empezar
30-10-2013 21:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] brunodiaz recibio 1 Gracias por este post
Atahualpa (30-10-2013)
Atahualpa Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 21
Agradecimientos dados: 9
Agradecimientos: 0 en 0 posts
Registro en: Oct 2013
Mensaje: #15
RE: Fatal error: Call to a member function prepare() on a non-object in
Disculpe que los moleste de nuevo.

Tenia este problema: Invalid argument supplied for foreach()

Asi que vi los foreach reciben solo arrays y le puse un if(is_array($fila)){ ....

El problema que tengo es que no se como hacer para que $fila sea un array. Ya que debería mostrarme la informacion que pongo ahí.


public function mostrar()
{
$this->objetoDatos->conectar();
$fila=$this->objetoDatos->ejecutar("select * from libros where codigo_libro=$this->codigo_libro");
if(is_array($fila)){
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();
}

}

(Este mensaje fue modificado por última vez en: 31-10-2013 01:15 por Atahualpa.)
30-10-2013 22:47
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)