Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2005, 11:09
Awer
 
Fecha de Ingreso: mayo-2003
Mensajes: 1
Antigüedad: 20 años, 10 meses
Puntos: 0
(Mal)utilizando mysqli orientado a objetos

Hola, qué tal.

A ver si me podéis echar una mano con este problema. Tengo una página PHP (index.php) con las siguientes líneas:



...
$sentenciaSQL = "SELECT * FROM articulo ORDER BY fecha DESC";
$bd = new GestionBDMySql();
$bd->conecta();
$registros = $bd->ejecutaSQL($sentenciaSQL);
while ($registro = $bd->devuelveSiguienteRegistro($registros)) {
...
}
...


Al cargar la página, salta el siguiente error:


Fatal error: Call to a member function fetch_assoc() on a non-object in C:\[...]\GestionBDMySql.php on line 24


El archivo GestionBDMySql.php es un fichero PHP que contiene, exclusivamente, la definición de una clase con el mismo nombre (GestionBDMySql).
Aquí tenéis el código de dicho script:

<?php
class GestionBDMySql {
private $conexion;
/////////////////
/////////////////
function __get($con) {
return $this->conexion;
}
/////////////////
function conecta() {
$this->conexion = new mysqli("servidor", "usuario", "clave");
$this->conexion->select_db("bd");
}
/////////////////
function desconecta() {
$this->conexion->close();
}
/////////////////
function devuelveNumeroRegistros($registros) {
return $registros->num_rows();
}
/////////////////
function devuelveSiguienteRegistro($registros) {
return $registros->fetch_assoc(); <--- Ésta es la línea 24
}
/////////////////
function ejecutaSQL($cadenaSQL) {
return $this->conexion->query($cadenaSQL);
}
/////////////////
function liberaRegistros($registros) {
$registros->free();
}
}
?>

Supongo, según el mensaje de error, que el intérprete PHP no reconoce a la variable $registros como un conjunto de registros (dicho de otra forma, no lo considera un objeto). En la tabla articulo hay registros, por lo que evitamos un valor NULL. ¿Se os ocurre cuál puede ser el motivo del fallo?

Añadir que el error lo da, como podéis ver, dentro de la función devuelveSiguienteRegistro($registros), con lo que el problema no se encuentra en la falta de reconocimiento del archivo GestionBDMySql.php o del módulo mysqli.dll (por ejemplo, la línea $bd->conecta(); funciona sin problemas).

Muchas gracias por adelantado.