Tengo una consulta SQL que se parametriza por un marco interno muy limitado. La consulta tiene este aspecto:Cláusula SQL In con cero a muchos parámetros
Select * from somewhere
where name IN (:parameter);
El código inyectará cero en muchas cadenas en la ubicación especificada por: parámetro. El indicador ": parámetro" solo se puede usar dentro de la cláusula "IN" (por lo tanto, no se puede mover después de la cláusula where para insertar condicionalmente la sección 'name IN').
A veces, el usuario tendrá que establecer el parámetro a:
'perro', 'gato'
Otras veces, el usuario no va a poner ningún valor en el: variable de parámetro. Esto causa un problema ya que la consulta SQL resultante será:
Select * from somewhere
where name IN();
Mi código puede atrapar el caso en que el parámetro está vacío, pero necesito algo que puedo inyectar en el comunicado en el que se garantiza que nunca coincidir con una real cuerda.
¿Hay alguna expresión regular SQL que pueda inyectar que NUNCA coincidiría con ninguna cadena? Algo como%.% O algo ...
Gracias!
Esto podría necesitar más reflexión. Suponiendo que la consulta es su consulta real, básicamente está seleccionando cada registro y cada columna en una tabla de base de datos (presumiblemente grande, si requiere una IN), que puede no ser la mejor estrategia. –
mirándolo desde la otra dirección, ¿por qué no se permite que el usuario envíe la página si ese campo está vacío? –
@Robert: en realidad hay otras partes en la consulta; Lo simplifiqué para los propósitos de stackoverflow; sin embargo, las otras partes no eliminan el problema con el parámetro de nombre – David