Pregunta

En Ruby ActiveRecord no proporciona el enlace dinámico para la actualización y el inserto sqls, por supuesto que puede utilizar SQL crudo, pero que tiene que mantener la conexión, por lo que quiero saber si hay manera más sencilla de escapar de actualización o inserción SQL antes de ejecutar como el código a continuación:

ActiveRecord::Base.connection.insert(sql)

creo que puedo escribir código por gsub, pero sé que si no ha habido un método listo para hacerlo.

¿Fue útil?

Solución

Usted puede hacer esto:

ActiveRecord::Base.send(:sanitize_sql,["select * from my_table where description='%s' and id='%s'","mal'formed", 55], "my_table")

Por supuesto, esto significa que tienen los parametros por separado. No está seguro de si va a trabajar de otra manera, pero probarlo.

Otros consejos

Rieles> = 3.2.5 las siguientes obras para mí:

evil_input = '"\';%#{}\"foo'
ActiveRecord::Base.connection.quote(evil_input)
=> "'\"'';%\#{}\\\"foo'"

No está claro real lo que está pidiendo, porque su título se refiere escapar de una cadena antes de inserción o actualización, a continuación, en las etiquetas que hablan de la inyección de SQL.

Si es necesario tener ActiveRecord automáticamente codificación / modificar el contenido antes de la inserción o actualización, ¿Usted ha comprobado ActiveRecord de devoluciones de llamada ? La devolución de llamada before_save se disparará cuando se realiza una actualización o crear. Si desea modificar el contenido antes de que sea para su almacenamiento, que es un lugar bueno para hacerlo.

Si quieres parámetros de uso de SQL en lugar de insertar las variables en sus estados de "Insertar" de la inyección de SQL evitar "actualización" o, a continuación, utilizar AR asociaciones de variables . Vaya a la sección de "Condiciones".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top