Publicado por: 0

Lo que nos acaba de pasar mientras desarrollábamos algunos métodos que son llamados por ajax es algo bien curioso.

Resulta que si implementas un método que utiliza el DBO de base de datos para lanzar una consulta ‘con subconsultas’, es más que probable, que el método funcione correctamente, y haga lo que tenga que hacer, pero no devuelvas correctamente el resultado.
En mi caso, simplemente devuelvo un valor numérico que le dice al javascript si la ejecución ha ido bien o no, con un simple ‘echo “1”;’ o ‘echo “-2”;’ o lo que sea.

Pues resulta, que haciendo un alert de la variable donde se recoge el resultado de la llamada ajax, vemos que el resultado es el html de mensaje de error 500 de Joomla con el texto “No valid database connection” y toda la demás parafernalia que rodea al error, envés de nuestro simple ‘1’, o ‘x’.

Más raro resulta aún cuando comprobamos que si lanzamos la url que se ejecuta por ajax directamente en el navegador, no hay ningún problema, y los resultados son los esperados.

Después de mucho darle vueltas, resulta que hay un problemilla con el tema de las subconsultas. (Véase esta página)
Increíble pero cierto.
Reescribimos las consultas de la forma que dice la documentación, y el problema está resuelto.

$database =& JFactory::getDBO();
$query = "SELECT id FROM #__example2";
$database->setQuery($query);
$query = "SELECT * FROM #__example WHERE id IN (". implode(",", $database->loadResultArray()) .")";

Pensad que esto también ocurre con consultas del tipo ‘update’ o ‘delete’.

Enjoy codding!
xD

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.