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
verne Sin conexión
Militante
Así soy yo
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 76
Agradecimientos dados: 8
Agradecimientos: 14 en 8 posts
Registro en: Oct 2013
Mensaje: #16
RE: Fatal error: Call to a member function prepare() on a non-object in
(30-10-2013 22:47)Atahualpa escribió:  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");
return $fila;
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();
}

}


En primer lugar te diría que te preguntes por qué tenes un return en el medio de un método, esto te corta la ejecución del mismo, ya que hace devolver a mitad de ejecución el valor de $fila a el invocador de mostrar().
Por otro lado, consejo de amigo, si la función se llama mostrar, hacé lo que la función dice, ni más ni menos. No conectes ni desconectes nada, no hagas queries ni nada por el estilo. En el mostrar deberías tener casi únicamente los echo.
Algo más, los subíndices de los diccionarios(arrays), deben ser referenciados con strings. Si vos hacés $filaActual[categoria_libro], es probable que te funcione, pero PHP va a putearte con un notice diciendo que categoria_libro tiene pinta de constante pero como no existe lo asume como string (mierdas de PHP). Lo correcto sería hacer $filaActual["categoria_libro"]

Yendo al grano, la pregunta que hacés no tiene mucho sentido que digamos me parece, te diría que hagas un var_dump de $fila y te dijes en realidad cómo querés operar ese resultado.

Por último, esa query así escupida creo que ni te anda, ya que estás mezclando variables con objetos con strings, probá usar sprintf() por lo menos.

Espero haberte sido de ayuda, abrazo de gol.

Volverte loco es síntoma de la enfermedad del progreso.
31-10-2013 00:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] verne recibio 1 Gracias por este post
Atahualpa (31-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: #17
RE: Fatal error: Call to a member function prepare() on a non-object in
(31-10-2013 00:28)verne escribió:  
(30-10-2013 22:47)Atahualpa escribió:  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");
return $fila;
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();
}

}


En primer lugar te diría que te preguntes por qué tenes un return en el medio de un método, esto te corta la ejecución del mismo, ya que hace devolver a mitad de ejecución el valor de $fila a el invocador de mostrar().
Por otro lado, consejo de amigo, si la función se llama mostrar, hacé lo que la función dice, ni más ni menos. No conectes ni desconectes nada, no hagas queries ni nada por el estilo. En el mostrar deberías tener casi únicamente los echo.
Algo más, los subíndices de los diccionarios(arrays), deben ser referenciados con strings. Si vos hacés $filaActual[categoria_libro], es probable que te funcione, pero PHP va a putearte con un notice diciendo que categoria_libro tiene pinta de constante pero como no existe lo asume como string (mierdas de PHP). Lo correcto sería hacer $filaActual["categoria_libro"]

Yendo al grano, la pregunta que hacés no tiene mucho sentido que digamos me parece, te diría que hagas un var_dump de $fila y te dijes en realidad cómo querés operar ese resultado.

Por último, esa query así escupida creo que ni te anda, ya que estás mezclando variables con objetos con strings, probá usar sprintf() por lo menos.

Espero haberte sido de ayuda, abrazo de gol.

Bueno el return ya lo borré desde hace rato, pero lo puse sin querer en este tema.
31-10-2013 00:46
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: #18
RE: Fatal error: Call to a member function prepare() on a non-object in
foreach necesita un array que tenga un count >0

Fetchall deberia devolver un array.

Lo que dice verne de la query es cierto. En este caso particular la query si va andar, pero igualmente el codigo es poco legible y propenso a errores. No le encuentro mucho sentido al sprintf en PHP la verdad, pero podes aunque sea concatenar con . y separar variables de literales, o utilizar {variable}.
31-10-2013 01:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
sebasthian777 Sin conexión
Presidente del CEIT
mi propio camino NINGA
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.919
Agradecimientos dados: 43
Agradecimientos: 22 en 20 posts
Registro en: Nov 2011
Mensaje: #19
RE: Fatal error: Call to a member function prepare() on a non-object in
ni a gancho un debugger?

Me pueden decir lo que quieran, pero si estas comenzando, aparte de seguir los consejos que te dejaron, hacer un step by step sobre el codigo en tiempo real te va a ayudar a entender mejor como se programa... es como mas didactico...

Tabula y deja todo lindo... al principio es un pija (hasta que le tomas la mano y te sale solo) pero vas a encontrar cosas de tu codigo 10 millones de veces mas rapido.

(19-11-2013 11:48).py escribió:  
(19-11-2013 11:46)sebasthian777 escribió:  
(19-11-2013 11:43).py escribió:  Terminemos Hurd.
Prefiero dejarle ese laburo a gente sin vida social y que no tenga sexo.
Cuando te casas? Asi voy armando el Gannt.
31-10-2013 19:38
Visita su sitio web 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: #20
RE: Fatal error: Call to a member function prepare() on a non-object in
Porque el debugger de php es complicado de instalar/configurar.
Yo no recuerdo como instale el mío. No se si estaba ébrio o drogado, solo se que es posible.

Cita:Absolve me, save my reign
Have you forgotten me?
31-10-2013 20:50
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
sebasthian777 Sin conexión
Presidente del CEIT
mi propio camino NINGA
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.919
Agradecimientos dados: 43
Agradecimientos: 22 en 20 posts
Registro en: Nov 2011
Mensaje: #21
RE: Fatal error: Call to a member function prepare() on a non-object in
Nah... para nada... bajas el xampp si estas en windows o tiras un sudo apt-get install lampp (creo que era asi) en el debian y tenes instalado todo... tenes que descomentar 6 lineas (que estan al final del archivo de configuracion) y sale andando el debug...

x-debug perdon...

Igual los cracks en sistemas web son ustedes =P

Yo me quedo tirando spells & curses en el C++ y listo =P

(19-11-2013 11:48).py escribió:  
(19-11-2013 11:46)sebasthian777 escribió:  
(19-11-2013 11:43).py escribió:  Terminemos Hurd.
Prefiero dejarle ese laburo a gente sin vida social y que no tenga sexo.
Cuando te casas? Asi voy armando el Gannt.
(Este mensaje fue modificado por última vez en: 31-10-2013 22:33 por sebasthian777.)
31-10-2013 22:31
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
verne Sin conexión
Militante
Así soy yo
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 76
Agradecimientos dados: 8
Agradecimientos: 14 en 8 posts
Registro en: Oct 2013
Mensaje: #22
RE: Fatal error: Call to a member function prepare() on a non-object in
(31-10-2013 01:03)brunodiaz escribió:  Lo que dice verne de la query es cierto. En este caso particular la query si va andar, pero igualmente el codigo es poco legible y propenso a errores. No le encuentro mucho sentido al sprintf en PHP la verdad, pero podes aunque sea concatenar con . y separar variables de literales, o utilizar {variable}.

Yo particularmente uso el sprintf para tener, entre otras cosas, mejor legibilidad de código.
Es más práctico e intuitivo codear:


echo sprintf("El malviviente de %s atropeyó al pobre de %s con el %s y lo hizo percha", $malviviente->getName(), $victima->getName(), $vehiculo->getName());


que


echo "El malviviente de " . $malviviente->getName() . " atropeyó al pobre de " . $victima->getName() . " con el " . $vehiculo->getName() . " y lo hizo percha";



Y ni te cuento si necesitás hacer tu "sistema" en diferentes idiomas, para herramientas de traducción te viene mucho más cómodo el sprintf.

Volverte loco es síntoma de la enfermedad del progreso.
(Este mensaje fue modificado por última vez en: 31-10-2013 22:41 por verne.)
31-10-2013 22:40
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: #23
RE: Fatal error: Call to a member function prepare() on a non-object in
A mi me parece muchisimo mas legible el segundo ejemplo =P
31-10-2013 22:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
sebasthian777 Sin conexión
Presidente del CEIT
mi propio camino NINGA
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.919
Agradecimientos dados: 43
Agradecimientos: 22 en 20 posts
Registro en: Nov 2011
Mensaje: #24
RE: Fatal error: Call to a member function prepare() on a non-object in
El sprintf esta copado porque te formatea a lo que vos quieras...

Segun lo que tengas que mostrar te puede ahorrar lineas de codigo (o pensar un poco mas).

El segundo ejemplo tipo concatenación es mas legible si no laburaste mucho a medio nivel.



---

Lo que decia en cuanto al sprintf:

Cita:% - un caracter de porcentaje literal. No se requiere argumento.
b - el argumento es tratado como un integer y presentado como un número binario.
c - el argumento es tratado como un integer y presentado como el caracter con ese valor ASCII.
d - el argumento es tratado como un integer y presentado como un número decimal (con signo).
e - el argumento es tratado como notación científica (e.g. 1.2e+2). El especificador de precisión indica el número de dígitos después del punto decimal a partir de PHP 5.2.1. En versiones anteriores, se tomó como el número de dígitos significativos (uno menos).
E - como %e pero utiliza la letra mayúscula (e.g. 1.2E+2).
u - el argumento es tratado como un integer y presentado como un número decimal sin signo.
f - el argumento es tratado como un float y presentado como un número de punto flotante (consciente de la configuración regional).
F - el argumento es tratado como un float y presentado como un número de punto flotante (no consciente de la configuración regional). Disponible desde PHP 4.3.10 y PHP 5.0.3.
g - más corto de %e y %f.
G - más corto de %E y %f.
o - el argumento es tratado como un integer y presentado como un número octal.
s - el argumento es tratado y presentado como un string.
x - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en minúsculas).
X - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en mayúsculas).

Por lo menos yo que laburo muchas cosas de electronica, para mostrar al futuro User (muchas veces especializado) me sirve mucho mostrar tanto en valor en Decimal, como en Hexa.

(19-11-2013 11:48).py escribió:  
(19-11-2013 11:46)sebasthian777 escribió:  
(19-11-2013 11:43).py escribió:  Terminemos Hurd.
Prefiero dejarle ese laburo a gente sin vida social y que no tenga sexo.
Cuando te casas? Asi voy armando el Gannt.
01-11-2013 09:04
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: