El bloque se sustituye y se repite por "HTML" por cada registro devuelto por la consulta. El funcionamiento es similar al Tag @. La sentencia SQL debe empezar por SELECT.
Podemos hacer referencia a cada campo de cada registro con:
{: @$ table.field :}
Donde "field" es el nombre del campo de la tabla. {: @$ table.field :}
es una propiedad de {: @ (table) HTML :} por lo que
sólo tiene valor dentro del bloque table:
<table border="1">
{: sql (
'SELECT * FROM `table`
WHERE 1
LIMIT 5;'
)
<tr>
<td> {: @$ table.name :} </td>
<td> {: @$ table.email :} </td>
</tr>
:}
</table>
{: @$ table.email :} <- ERROR, no tendrá ningún valor aquí.
Lee de la configuración (.nes.cfg) las siguientes variables para acceder a la base de datos:
DB_base = base_name
DB_user = user
DB_pass = password
DB_driver = mysql # Valor por defecto: mysql
DB_host = localhost # Valor por defecto: localhost
DB_port = 3306 # Valor por defecto: 3306
Aunque podemos incluir el Tag sql en cualquier archivo, Nes define un tipo de archivo para las sentencias SQL: .nsql
Con include se pueden enviar estas variables como parámetros a los archivos de tipo nsql:
{: include ('file.nsql','base_name','user','password','driver','host','port') :}
Ver: Inyección de código y Cross-site scripting.
Los parámetros permiten la inclusión:
<table border="1">
{: sql (
'SELECT * FROM {: $ table :}
WHERE {: $ condition :}
LIMIT 5;'
)
<tr>
<td> {: @$ table.name :} </td>
<td> {: @$ table.email :} </td>
</tr>
:}
</table>
archivo.nsql:
{: NES 1.0 ('archivo.pl') :}
<table border="1">
{: sql (
'SELECT * FROM `users`
WHERE {: $ condition :}
LIMIT 3;'
)
<tr>
<td> {: @$ users.name :} </td>
<td> {: @$ users.email :} </td>
</tr>
:}
</table>
archivo.pl:
use Nes;
my $nes = Nes::Singleton->new('archivo.nsql');
my $nes_tags = {};
$nes_tags->{'condition'} = 1;
$nes->out(%$nes_tags);
Salida:
| pepito | pepito@example.com |
| juanin | juanin@example.com |
| paca | paca@example.com |
Se ha limitado explícitamente a sentencias SELECT la ejecución de SQL con éste Tag para cumplir con la política de Nes de que los html/plantillas no modifiquen los datos.