En cuando a seguridad no veo problemas porque no se reciben datos del usuario para las consultas.
En cuanto a optimización, lo que haría sería seleccionar categorías, seleccionar imágenes y agruparlas, así te ahorras unas cuantas consultas.
Código PHP:
$resultado = mysql_query("SELECT categorias...");
$categorias = array();
while ($fila = mysql_fetch_array($resultado))
{
$categorias[$fila['nombre']] = $categoria;
$categorias[$fila['nombre']]['imagenes'] = array();
}
$resultado = mysql_query("SELECT imagenes...");
$categorias = array();
while ($fila = mysql_fetch_array($resultado))
{
if (isset($categorias[$fila['categoria_nombre']]['imagenes']))
{
$categorias[$fila['categoria_nombre']]['imagenes'] = $fila;
}
}
Y luego al mostrarlas no incluir un archivo cada vez, puedes hacerlo tal cual o con el sistema de plantillas que uses:
Código PHP:
$plantilla_categoria = '
<div>
<strong>%s</strong>
<p>%s</p>
<div>
%s
</div>
</div>
';
$plantilla_imagen = '
<div>
<img src="%s" />
</div>
';
foreach ($categorias as $categoria)
{
$imagenes = '';
foreach ($categoria['imagenes'] as $imagen)
{
$imagenes = sprintf($plantilla_imagen,
$imagen['ruta']
);
}
echo sprintf($plantilla_categoria,
$categoria['nombre'],
$categoria['description'],
$imagenes
);
}
Y si son muchas categorías e imágenes por categoría quizás sea más cómodo mostrar en páginas separadas las categorías con sus imágenes.