
🐘 Moodle y PHP: el error común con get_recordset_sql()
En el día a día con Moodle, uno de los errores más frecuentes al trabajar con la base de datos es usar mal get_recordset_sql().
Muchos piensan que si la consulta no devuelve resultados, el recordset será null o false. Pero en realidad… ¡no es así!
🔎 Veamos un ejemplo real:
$adatos = $DB->get_recordset_sql($sql);
if($adatos){
print "No hay datos en fase 12"; exit;
}
A primera vista parece correcto, pero en la práctica get_recordset_sql() siempre devuelve un objeto iterador, aunque la consulta esté vacía.
Por lo tanto, la condición if($adatos) siempre se cumple… y el código no hace lo que esperábamos.
✅ La solución: verificar si hay resultados
Existen dos enfoques recomendados:
1. Usando valid() para comprobar si hay registros
$adatos = $DB->get_recordset_sql($sql);
if (!$adatos->valid()) {
echo "No hay datos en fase 12";
$adatos->close();
exit;
}
foreach ($adatos as $dato) {
// procesar registros
}
$adatos->close();
2. Usando record_exists_sql() para mayor eficiencia
Si lo único que necesitas es saber si hay resultados o no:
if (!$DB->record_exists_sql($sql)) {
echo "No hay datos en fase 12";
exit;
}
🎯 Conclusión
get_recordset_sql()es ideal para recorrer grandes cantidades de datos, pero recuerda: no devuelvefalse, sino un objeto iterador.- Si solo quieres verificar existencia, la opción más limpia es
record_exists_sql(). - Cerrar siempre el recordset con
$adatos->close();es buena práctica para liberar recursos.
💡 Tip para tu día a día con Moodle: pequeños detalles como este marcan la diferencia entre un código que “funciona” y un código que es eficiente y seguro.
👉 ¿Te ha pasado este error en Moodle? ¿Cuál es tu forma favorita de verificar si existen registros antes de procesarlos?
