Foros del Web » Programando para Internet » PHP »

PHP OO Fatal error: Call to a member function fetch_array() on a non-object

Estas en el tema de Fatal error: Call to a member function fetch_array() on a non-object en el foro de PHP en Foros del Web. Buenos días señores, me encuentro estudiando desarrollo de aplicaciones web y llevo unas cuantas horas intentando sacar información sobre este error, aquí os adjunto el ...
  #1 (permalink)  
Antiguo 23/09/2013, 01:43
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Fatal error: Call to a member function fetch_array() on a non-object

Buenos días señores, me encuentro estudiando desarrollo de aplicaciones web y llevo unas cuantas horas intentando sacar información sobre este error, aquí os adjunto el código por si alguien sabe de que puede tratarse. Lo que pretendo es, a través de la clase Mpeliculas, obtener un array de los campos ya existentes en la base de datos. Pero al intentar acceder a la variable que devuelvo desde la función me da ese error al intentar utilizarla en el index.php

Index.php:

<html>
<head>
<title>Cine</title>
</head>
<body>
<?php
echo "<a href='index.php?mostrar=peliculas' style=margin-left:30px;margin-right:30px;>Mostrar peliculas</a>";
echo "<a href='index.php?mostrar=personas'>Mostrar actores</a></br>";

?>
<?php
include 'Mpeliculas.php';
include 'Mactores.php';
if(isset($_REQUEST['mostrar'])){
?>
<table>
<?php
if ($_REQUEST["mostrar"] == "peliculas"){
?>
<tr><th>C&oacute;digo de la Pelicula</th>
<th>Titulo</th>
<th>Genero</th>
<th>Pais</th>
<th>A&ntilde;o</th></tr>
<?php
$pelis[]=[];
$peliculas=new Mpeliculas();
$peliculas->MuestraPeliculas($pelis);
while($resultado=$pelis->fetch_array()){
echo "";
echo "";
echo "";
echo "";
echo "";
}
}else if ($_REQUEST["mostrar"] == "personas"){
?>
<tr><th>C&oacute;digo del Actor</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Pais</th></tr>
<?php
$actores="";
$personas=new Mactores();
$personas->MuestraActores($actores);
}
}
?>
</table>
</body>
</html>

Clase Mpeliculas:

<?php
class Mpeliculas{
public function MuestraPeliculas($peliculas){
$db=new mysqli("localhost","root","","Cine");
if($db->connect_error){
die ("Error en la conexion: ".$conexion->connect_error);
}
$peliculas=$db->query("SELECT * from peliculas");
return $peliculas;
}
}
?>
  #2 (permalink)  
Antiguo 23/09/2013, 02:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Fatal error: Call to a member function fetch_array() on a non-object

Código PHP:
Ver original
  1. $peliculas=new Mpeliculas();
  2. $pelis=$peliculas->MuestraPeliculas($pelis);
  3. while($resultado=$pelis->fetch_array()){

Código PHP:
Ver original
  1. class Mpeliculas{
  2. public function MuestraPeliculas(){
  3. $db=new mysqli("localhost","root","","Cine");
  4. if($db->connect_error){
  5. die ("Error en la conexion: ".$conexion->connect_error);
  6. }
  7. $peliculas=$db->query("SELECT * from peliculas");
  8. return $peliculas;
  9. }
  10. }

Intenta esto....

Repasa la logica de tu programación... que sentido tiene hacer la conexion a la bbdd dentro de la función....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 23/09/2013, 03:05
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Fatal error: Call to a member function fetch_array() on a non-object

No sé por qué no se debe poner la conexión a la base de datos desde dentro de la función... La verdad es que llevo poco tiempo manejando objetos y lo único que he visto ha sido autodidacta en java. Estoy probando mas cosas, como declarando la base de datos como atributo del objeto, que no tiene sentido, pero no se como solucionarlo.
  #4 (permalink)  
Antiguo 23/09/2013, 04:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Fatal error: Call to a member function fetch_array() on a non-object

Crea una clase conexion, en ella declaras la bbdd y todos sus dados y estableces la conexion, ademas entre otras posibles debe tener una función capaz de recibir una query como entrada y retornar el resultset....

La aplicación por su parte debe crear una instancia de esa clase y las otras clases deben usar esa instancia para hacer las consultas a la base de datos... asi con una sola conexion puedes hacer todas las consultas.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: call, fatal, function, html, mysql, select, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:03.