Ir al contenido

Tunnel Query

El nodo Tunnel Query ejecuta consultas SQL sobre una base de datos MySQL remota a la que no podés acceder directamente — el típico hosting compartido donde el puerto de MySQL está cerrado y no hay VPN. En vez de conectar al puerto 3306, envía la consulta por HTTPS a un archivo tunnel.php en ese hosting, que la ejecuta localmente con PDO y prepared statements.

Soporta variables dinámicas en la consulta ({{campo}}, {{@NombreNodo.campo}}, {{#N.campo}}, {{var.nombre}}), para automatizar sitios PHP/WordPress/WooCommerce en hosting económico sin exponer la base de datos.

Configuralo primero: para crear e instalar tu tunnel.php, seguí la guía del Tunnel Connector — incluye un asistente que genera tu configuración.

ParámetroTipoObligatorioDescripción
credentials_idcredentialsSíCredencial del túnel (URL del tunnel.php + secret compartido)
querycodeSíConsulta SQL a ejecutar (soporta {{variable}})
databasetextNoSobrescribe la base de datos por defecto del túnel (multi-tenant, header X-Tenant-DB)

Credencial tipo tunnel, con:

  • url: URL completa de tu tunnel.php (ej. https://tu-dominio.com/floogos/tunnel.php)
  • secret: secret compartido, ≥32 caracteres (coincide con TUNNEL_SECRET de tunnel.config.php)
  • database: (opcional) base de datos por defecto
{
"nextModule": null,
"data": [
{ "id": 1, "nombre": "Ejemplo", "email": "test@test.com" }
],
"_meta": { "success": true, "rowCount": 1, "insertId": null }
}
{
"credentials_id": 1,
"query": "SELECT * FROM pedidos WHERE estado = 'pendiente' LIMIT 100"
}

Con variables dinámicas:

{
"credentials_id": 1,
"query": "INSERT INTO clientes (nombre, email) VALUES ('{{nombre}}', '{{email}}')"
}
  • Las variables {{campo}} se convierten en marcadores posicionales ? y se envían como params (prepared statements) — nunca por interpolación de strings.
  • El túnel permite SELECT / INSERT / UPDATE; DELETE solo en tablas de lista blanca; DROP / ALTER / TRUNCATE / CREATE / GRANT y multi-statement están bloqueados; las keywords peligrosas (INTO OUTFILE, LOAD_FILE, SLEEP, BENCHMARK, mysql.user) se rechazan.
  • Usa HTTPS (axios) con timeout configurable (por defecto 15000 ms).
  • Un 403 normalmente indica un secret incorrecto o una IP no permitida por el túnel.