Error en la función fetch_assoc()
Publicado por pedro (1 intervención) el 31/01/2017 01:22:25
!Hola a todos estoy siguiendo el tutorial POO Y MVC EN PHP pasteado en la sección cursos y manuales de la web del programador aquí el link. http://www.lawebdelprogramador.com/cursos/PHP/8501-POO-y-MVC-en-PHP.html
y puse en practica el ejemplo de ABM de usuarios mostrado en el tutorial, creando la BD y la tabla, con los nombres y atributos correspondientes al ejercicio, pero al momento de poner en ejecución el archivo abm_example.php, presenta el siguiente error:
"Fatal error: Call to a member function fetch_assoc() on a non-object", en referencia a el procedimiento get_results_from_query() de la clase abstracta DBAbstractModel,
Aqui el código del procedimiento:
acá dejo el código de los tres archivos que componen el ejercicio. Agradezco de antemano cualquier colaboración que me ayude a corregir y por ende a comprender mejor el porque de este error.
código completo del ejercicio:
Archivo db_abstract_model.php
Archivo usuarios_model.php
Archivo abm_example.php
y puse en practica el ejemplo de ABM de usuarios mostrado en el tutorial, creando la BD y la tabla, con los nombres y atributos correspondientes al ejercicio, pero al momento de poner en ejecución el archivo abm_example.php, presenta el siguiente error:
"Fatal error: Call to a member function fetch_assoc() on a non-object", en referencia a el procedimiento get_results_from_query() de la clase abstracta DBAbstractModel,
Aqui el código del procedimiento:
1
2
3
4
5
6
7
8
9
#Traer resultados de una consulta en un array
protected function get_results_from_query(){
$this->open_connection();
$result = $this->conn->query($this->query);
while ($this->rows[] = $result->fetch_assoc());
$result->close();
$this->closed_connection();
array_pop($this->rows);
}
acá dejo el código de los tres archivos que componen el ejercicio. Agradezco de antemano cualquier colaboración que me ayude a corregir y por ende a comprender mejor el porque de este error.
código completo del ejercicio:
Archivo db_abstract_model.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
abstract class DBAbstractModel {
private static $db_host = 'localhost';
private static $db_user = 'usuario';
private static $db_pass = 'contraseña';
protected $db_name = 'mydb';
protected $query;
protected $rows = array();
private $conn;
# métodos abstractos para ABM de clases que hereden
abstract protected function get();
abstract protected function set();
abstract protected function edit();
abstract protected function delete();
# los siguientes métodos pueden definirse con exactitud
# y no son abstractos
# Conectar a la base de datos
private function open_connection() {
$this->conn = new mysqli(self::$db_host, self::$db_user,
self::$db_pass, $this->db_name);
}
# Desconectar la base de datos
private function close_connection() {
$this->conn->close();
}
# Ejecutar un query simple del tipo INSERT, DELETE, UPDATE
protected function execute_single_query() {
$this->open_connection();
$this->conn->query($this->query);
$this->close_connection();
}
# Traer resultados de una consulta en un Array
protected function get_results_from_query() {
$this->open_connection();
$result = $this->conn->query($this->query);
while ($this->rows[] = $result->fetch_assoc());
$result->close();
$this->close_connection();
array_pop($this->rows);
}
}
?>
Archivo usuarios_model.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
require_once('db_abstract_model.php');
class Usuario extends DBAbstractModel {
public $nombre;
public $apellido;
public $email;
private $clave;
protected $id;
function __construct() {
$this->db_name = 'book_example';
}
public function get($user_email='') {
if($user_email != ''):
$this->query = "
SELECT id, nombre, apellido, email, clave
FROM usuarios
WHERE email = '$user_email'
";
$this->get_results_from_query();
endif;
if(count($this->rows) == 1):
foreach ($this->rows[0] as $propiedad=>$valor):
$this->$propiedad = $valor;
endforeach;
endif;
}
public function set($user_data=array()) {
if(array_key_exists('email', $user_data)):
$this->get($user_data['email']);
if($user_data['email'] != $this->email):
foreach ($user_data as $campo=>$valor):
$$campo = $valor;
endforeach;
$this->query = "
INSERT INTO usuarios
(nombre, apellido, email, clave)
VALUES
('$nombre', '$apellido', '$email', '$clave')
";
$this->execute_single_query();
endif;
endif;
}
public function edit($user_data=array()) {
foreach ($user_data as $campo=>$valor):
$$campo = $valor;
endforeach;
$this->query = "
UPDATE usuarios
SET nombre='$nombre',
apellido='$apellido',
clave='$clave'
WHERE email = '$email'
";
$this->execute_single_query();
}
public function delete($user_email='') {
$this->query = "
DELETE FROM usuarios
WHERE email = '$user_email'
";
$this->execute_single_query();
}
function __destruct() {
unset($this);
}
}
?>
Archivo abm_example.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
require_once('usuarios_model.php');
# Traer los datos de un usuario
$usuario1 = new Usuario();
$usuario1->get('user@email.com');
print $usuario1->nombre . ' ' . $usuario1->apellido . ' existe<br>';
# Crear un nuevo usuario
$new_user_data = array(
'nombre'=>'Alberto',
'apellido'=>'Jacinto',
'email'=>'albert2000@mail.com',
'clave'=>'jacaranda'
);
$usuario2 = new Usuario();
$usuario2->set($new_user_data);
$usuario2->get($new_user_data['email']);
print $usuario2->nombre . ' ' . $usuario2->apellido . ' ha sido creado<br>';
# Editar los datos de un usuario existente
$edit_user_data = array(
'nombre'=>'Gabriel',
'apellido'=>'Lopez',
'email'=>'marconi@mail.com',
'clave'=>'69274'
);
$usuario3 = new Usuario();
$usuario3->edit($edit_user_data);
$usuario3->get($edit_user_data['email']);
print $usuario3->nombre . ' ' . $usuario3->apellido . ' ha sido editado<br>';
# Eliminar un usuario
$usuario4 = new Usuario();
$usuario4->get('lei@mail.com');
$usuario4->delete('lei@mail.com');
print $usuario4->nombre . ' ' . $usuario4->apellido . ' ha sido eliminado';
?>
Valora esta pregunta


0