Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Fatal error: Call to a member function fetchArray() on boolean in

Estas en el tema de Fatal error: Call to a member function fetchArray() on boolean in en el foro de PHP en Foros del Web. Hola antes de empezar debo mencionar que apenas estoy comenzando con php y que agradezco de antemano cualquier ayuda u orientacion que me puedan dar. ...
  #1 (permalink)  
Antiguo 17/05/2017, 16:58
 
Fecha de Ingreso: abril-2006
Mensajes: 26
Antigüedad: 18 años, 6 meses
Puntos: 0
Fatal error: Call to a member function fetchArray() on boolean in

Hola antes de empezar debo mencionar que apenas estoy comenzando con php y que agradezco de antemano cualquier ayuda u orientacion que me puedan dar.

Y bueno entrando ya en tema lo que estoy haciendo es un curso de php y en el estoy desarrollando como ejemplo una aplicacion que me permite guardar favoritos, y dentro de la aplicacion hay una script para crear usuarios nuevos el script trabaja bien pero ahora que estoy tratando de controlar un poco mas mi aplicacion estoy tratando de aplicar rangos de usuario.

estoy usando una base de datos sqlite3, la cuestion es que al modificar el codigo estoy haciendo un while y al ejecutarlo me marca un Fatal error: Call to a member function fetchArray() on boolean in C:\wamp\www\favoritosOnline\crearusuario.php on line 31

Este es el codigo que tengo escrito:
Código:
<?php

//Obtener variables
$usuario = $_POST['usuario'];
$contrasena = $_POST['contrasena'];
$nombre = $_POST['nombre'];
$apellido = $_POST['apellido'];
$edad = $_POST['edad'];

// Crear Conexion
//clase constructora de la base de datos
class BaseDatos extends SQLite3{
  function __construct(){
    $this->open('favoritos.db');
  }
}
//se crea la nueva instancia donde se carga la clase base de datos en la variable $db con una estructura de control if para checar si se crea la base de datos o da error
$db = new BaseDatos();
if (!$db) {
  echo "<p>ERROR al abrir la base de datos favoritos</p>";
}

$consulta = "SELECT * FROM usuarios";

//Ejecutar consulta
$resultado=$db->exec($consulta);

while ($fila = $resultado->fetchArray(SQLITE3_ASSOC)) {
  if($fila['usuario'] == $usuario){

  $contador++;

  }else{}
}

if ($contador ==0) {
//Consulta
/*Privilegios de usuario
1=administrador
2=controlador
3=usuario registrado
4=usuario invitado
*/
$consulta = <<<sql
INSERT INTO usuarios VALUES('$usuario','$contrasena','$nombre','$apellido','$edad','3')
sql;

//Ejecutar consulta
$resultado=$db->exec($consulta);

//Y vuelvo
echo '
<html>
  <head>
    <meta http-equiv="REFRESH" content="0;url=index.php">
  </head>
</html>
';
}else{echo "El nombre de usuario que has elegido ya existe. Elige otro";}
//Cerrar dase de datos
$db->close();

?>
la verdad no se que es lo que tenga mal espero puedan ayudarme a resolver el problema.
  #2 (permalink)  
Antiguo 17/05/2017, 17:28
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Fatal error: Call to a member function fetchArray() on boolean in

Cita:
la verdad no se que es lo que tenga mal espero puedan ayudarme a resolver el problema
El problema es que no leiste la documentación:

Cita:
SQLite3::exec — Ejecutar una consulta que no devuelve resultados en una base de datos dada
Tienes que usar query
http://php.net/manual/es/sqlite3.query.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 17/05/2017, 18:40
 
Fecha de Ingreso: abril-2006
Mensajes: 26
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Fatal error: Call to a member function fetchArray() on boolean in

gracias amigo tienes razon solo cambie exec por query y todo resuelto

antes:
Código:
$resultado=$db->exec($consulta);
despues:
Código:
$resultado=$db->query($consulta);
Te agradezco muchisimo la ayuda, ya puedo seguir con mi curso.

Etiquetas: boolean, call, fatal, function, html, select, sql, url, 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 10:19.