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

Iniciado por herrwolf, 17 Mayo 2017, 21:09 PM

0 Miembros y 1 Visitante están viendo este tema.

herrwolf

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) [Seleccionar]
<?php
session_start
();

$contador 0;

//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.

engel lex

linea 31
Código (php) [Seleccionar]
while ($fila = $resultado->fetchArray(SQLITE3_ASSOC)) {

donde $resultado viene de linea 29
Código (php) [Seleccionar]
$resultado=$db->exec($consulta);

el manual dice
http://php.net/manual/es/sqlite3.exec.php

CitarValores devueltos

Devuelve TRUE si la consulta tuvo éxito, FALSE en caso de error.

y tu error dice
CitarFatal error: Call to a member function fetchArray() on boolean
CitarError fatal: Llamado a funcion  fetchArray() en un booleano

revisa la documentación a ver donde se ubica el resultado del exec, porque el no lo retorna
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

herrwolf

Ya lo he solucionado

Como comentas engel lex el exec no devuelve valores de true o false lo unic oque tuve que hacer es cambiar el exec por query

antes:
$resultado=$db->exec($consulta);

despues:
$resultado=$db->query($consulta);