es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error en la sintaxis SQL SET Syntax, ¿cómo solucionarlo?

Mientras estoy en la función Lambda, intento ejecutar la siguiente consulta, pero arroja un error ERPARSEERROR:

{
   "errorType": "Error",
   "errorMessage": "ER<em>PARSE</em>ERROR: Tiene un error en la sintaxis de su SQL; verifique el manual que corresponde a su versión de servidor MySQL para conocer la sintaxis correcta para usar cerca de 'SELECT DISTINCT A.j FROM ...' en la línea 1",
   "trace": [
const vandium = require('vandium');

var mysql = require('mysql');
var connection = mysql.createConnection({ multipleStatements: true });

exports.handler = vandium.generic()
   .handler((event, context, callback) => {

   var connection = mysql.createConnection({
      host: 'xjxj',
      user: 'xjxj',
      password: 'xjxj',
      database: 'xjxj'
   });
   var x = connection.escape(event.x);
   var y= connection.escape(event.y);
   var z = connection.escape(event.z);

connection.query(“SET @” + y + “=2; SELECT DISTINCT A.j FROM A INNER JOIN B, C WHERE A.j = B.j and C.x= ” + x + ” and C.y=”+ y + ” and C.z = ” + z + “”, function (error, results, fields) {
if (error) {
connection.destroy();
throw error;
}
else {
console.log(results);
callback(null, results);
}
});
});


También pensé en algo como:

SET @y=2;…

pero sin éxito.

Estoy intentando implementar algo similar a esto:

SET @y := @k :=79;SELECT DISTINCT A.j FROM A INNER JOIN B, C WHERE A.j = B.j and C.x= “+ x + ” and C.y=” + y + ” and C.z= ” + z + ”
“`
Por supuesto, no hay una variable ‘k’ en el primer bloque de código, pero aquí está la idea aproximada.

¿Qué ha salido mal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El principal problema con la consulta es que intenta ejecutar dos declaraciones juntas, la declaración SET y la declaración SELECT. La biblioteca mysql utilizada en el código solo permite ejecutar una declaración a la vez de forma predeterminada. Esta es una medida de seguridad para evitar ataques de inyección SQL.

    En el bloque de código funcional, la opción multipleStatements se establece en true al crear la conexión, lo que permite ejecutar múltiples declaraciones. Sin embargo, esto generalmente no se recomienda debido a los riesgos de seguridad.

    Una solución alternativa sería dividir la declaración SET y la declaración SELECT en dos consultas separadas y ejecutarlas de forma secuencial. Esto aseguraría que cada consulta se ejecute por separado y evitaría la aparición de errores de sintaxis como ER_PARSE_ERROR.

    Otro problema en el código es que la variable connection se define dos veces, una globalmente y otra dentro de la función del controlador. Esto puede causar comportamientos inesperados y errores. Se recomienda eliminar la variable global y utilizar solo la variable local dentro de la función del controlador.

Comments are closed.