Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/04/2015, 04:06
Avatar de zhordrak
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