ShareThis

martes, 21 de julio de 2009

Codigo PHP genera página en blanco

Recientemente estuve adelantando un desarrollo en PHP. Con gran sorpresa me encontre con que al pasar el código al ambiente de producción, algunas porciones de la aplicación dependientes de una conexión a base de datos MySQL no funcionaban apropiadamente.

Lo primero que intente fue habilitar las opciones de debug:


error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors',1);
ini_set('display_errors', 'On');
...el resto de código...


Sin embargo, la salida no evidenciaba ningun mensaje de error fatal.
De manera seguida, intente extraer la información de configuración del hosting mediante el siguiente codigo PHP:


php phpinfo();


Alli se indicaba que se trataba de una versión PHP 5.2.
Finalmente, despues de dos dias indagando en Internet, encontre que el error se debia a un bug de PHP al usar fetch_assoc()


Hay dos workarounds para este problema:

Primera alternativa
Utilice fetch_row en lugar de fetch_assoc.


"//$row=$result->fetch_assoc();" the code is not working...
"$row=$result->fetch_row();" the code is working...



Segunda alternativa
Utilice el siguiente código de workaround.


$finfo = $result->fetch_fields(); $nc=0; foreach ($finfo as $val)
{$row_key[$nc++]=$val->name;} //---
for ($i=0; $i<$num_results; $i++) {
//$row=$result->fetch_assoc();
$row_val=$result->fetch_row();$row=array_combine($row_key,$row_val);
echo "

".($i+1)." Title: ";
echo htmlspecialchars(stripslashes($row['title']));
echo "
Author: ";
echo stripslashes($row['author']);
}



Este problema al parecer estaba presente en 2002 de acuerdo a un reporte en bugs.php.net.

Espero que sea de utilidad.

No hay comentarios:

Publicar un comentario