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.