Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Info sobre "Fatal Error: Call to a member function fetchArray(

Estas en el tema de Info sobre "Fatal Error: Call to a member function fetchArray( en el foro de PHP en Foros del Web. Buenas a todos, lo primero pedir perdón si esto no va aquí, pero he estado mirando y la verdad no se si la consulta va ...
  #1 (permalink)  
Antiguo 05/04/2015, 04:06
Avatar de zhordrak  
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
Info sobre "Fatal Error: Call to a member function fetchArray(

Buenas a todos, lo primero pedir perdón si esto no va aquí, pero he estado mirando y la verdad no se si la consulta va en PHP o en SQLite.

Os cuento el problema que tengo, resulta que tengo un formulario el cual envía los datos a un PHP que se encarga de insertar esos datos en una base SQLite, hasta aquí todo bien, lo he probado en local y funciona perfecto, pero al subirlo al servidor me arroja el siguiente error:

Fatal error: Call to a member function fetchArray() on a non-object in /homepages/45/d311878321/htdocs/examples/gestor_citas/registro.php on line 21

Nota: La linea 21 es esta: "while($row = $ret->fetchArray(SQLITE3_ASSOC) ){"

Código del archivo que recoge los datos del formulario.
Código:
<?php
// -------------------------------------------------------------------- Creo una variable con un INPUT del formulario.
	$lock = $_POST['lock'];
// --------------------------------------------------------------------  Hago la clase para leer el campo que me interesa.
   	class MyDB extends SQLite3
   	{
	function __construct()
      {
     	$this->open('./include/citas.db');
      }
   	}
   		$db = new MyDB();
   	if(!$db){
      	echo $db->lastErrorMsg();
   	} else {
   	}
   	$sql =<<<EOF
      SELECT * FROM userpass WHERE idpass = 1
EOF;
   $ret = $db->query($sql);
   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){		
// -------------------------------------------------------------------- Indico el campo para validarlo despues.
	$lock2	= $row['password'];
// -------------------------------------------------------------------- 
	}
   	$db->close();	
// -------------------------------------------------------------------- Chequeo que el INPUT coincida con el de la base de datos.
	if ($lock == $lock2) {
// -------------------------------------------------------------------- Declaramos las variables.
	$idcliente 	= $_POST['idcliente'];
	$cliente 		= $_POST['cliente'];
	$id2fecha 	= $_POST['id2fecha'];
	$id2hora 		= $_POST['id2hora'];
	$id2servicio 	= $_POST['id2servicio'];
	$reservado 	= $_POST['reservado'];
// -------------------------------------------------------------------- 
	class MiBD extends SQLite3
	{
    function __construct()
		{
        $this->open('./include/citas.db');
		}
	}
		$bd = new MiBD();
// -------------------------------------------------------------------- Insertamos los datos recogidos del formulario.
    $consulta = $bd->exec("INSERT INTO clientes (idcliente, cliente, id2fecha, id2hora, id2servicio, reservado) VALUES (Null, '$cliente', '$id2fecha', '$id2hora', '$id2servicio', '$reservado');");
// -------------------------------------------------------------------- Cerramos la conexion.	
	$bd->close();
// -------------------------------------------------------------------- Redirigimos despues de insertar.	
	header('Location:' . getenv('HTTP_REFERER'));
	exit;	
// -------------------------------------------------------------------- Si no coincide el INPUT y el campo de la base de datos, lo redirecciono a la pagina de error. (Solo muestra un mensaje, por eso no lleva ninguna variable)
	} else {
	header('Location:./error.php');
	}
?>
El formulario no lo pongo, mas que nada porque tiene mucho código para leer los datos de las distintas tablas, como fecha, hora servicio, etc... y haría el post muy largo, pero vamos en definitiva que si quito el "if else" del código de seguridad, funciona perfecto tanto en local como en remoto, si lo dejo, en local funciona pero en remoto no.

Bueno pues esto es la curiosidad que me pasa, y por mas que he mirado no entiendo donde esta el error, ya que todos los post que he visto, no les funcionaba tanto en local como en remoto, y por eso he decidido preguntar.

Bueno espero que podais echarme un cable a entender cual es el fallo..

Un saludo y gracias de antemano

Última edición por zhordrak; 05/04/2015 a las 04:08 Razón: Agregar datos faltantes
  #2 (permalink)  
Antiguo 05/04/2015, 09:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Info sobre "Fatal Error: Call to a member function fetchArray(

¿Al menos has verificado tener la misma versión de PHP/SQLite en el servidor como en local?

Porque la única razón que falle, siendo que tengas las mismas versiones, es que ocurra un error al momento de ejecutar la consulta.

¿Cómo estás depurando el error en caso de ocurrir entonces?

Sin saber dicho error no solucionarás nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/04/2015, 09:50
Avatar de zhordrak  
Fecha de Ingreso: septiembre-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Info sobre "Fatal Error: Call to a member function fetchArray(

Llámame idiota pero con la boca grande...

Ni por la mas remota idea se me ocurrió comprobar la versión de PHP/SQLite en local y remoto, ambas son distintas.

Bueno, pues ya podéis dar el tema por solucionado, instalare lo mismo en local y probare a depurar el error a ver porque se produce...

Saludos y muchas gracias...
  #4 (permalink)  
Antiguo 05/04/2015, 09:59
(Desactivado)
 
Fecha de Ingreso: abril-2015
Ubicación: España
Mensajes: 616
Antigüedad: 9 años, 7 meses
Puntos: 74
Respuesta: Info sobre "Fatal Error: Call to a member function fetchArray(

aquí pone que hay que cambiar las comillas dobles por simples

http://foro.elhacker.net/php/solucionado_call_to_a_member_function_fetcharray_o n_a_nonobject-t421784.0.html

Etiquetas: call, fatal, fecha, formulario, info, registro, select, sql, tabla, 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 13:10.