{: sql (SQL SELECT) HTML :}

Descripción

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') :}

Seguridad

Ver: Inyección de código y Cross-site scripting.

Inclusión

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>

Ejemplo

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


Notas:

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.