Duda sobre string para consulta SQL

Hola a la comunidad, tengo una duda, cuando se realizan consultas a base
de datos se utiliza el metodo:

Persona.find(:all, :conditions => [‘name = ?’, nombre])

Como puedo conseguir solamente esta cadena ya que esta me permite
formatear las entradas y no puedan hackearlas, algo de seguridad, por
que las utilice en otros metodos mas nativos y no lo formatea, sino los
anexa al ultimo del string, que metodo se utiliza para que los ingrese y
formatee en el string, como por ejemplo:

sql = [‘Sele… = ?’, para].(algun metodo)

Gracias de antemano.

carakan.wiebia.com

2008/1/28 Carlos R. [email protected]:

Hola a la comunidad, tengo una duda, cuando se realizan consultas a base
de datos se utiliza el metodo:

Persona.find(:all, :conditions => [‘name = ?’, nombre])

Es la forma correcta.

En resumen :

Mal : Persona.find(:all, :conditions => “name = ‘#{nombre}’”)

Bien : Persona.find(:all, :conditions => [“name = ?”, nombre)

Como puedo conseguir solamente esta cadena ya que esta me permite
formatear las entradas y no puedan hackearlas, algo de seguridad, por
que las utilice en otros metodos mas nativos y no lo formatea, sino los
anexa al ultimo del string, que metodo se utiliza para que los ingrese y
formatee en el string, como por ejemplo:

sql = [‘Sele… = ?’, para].(algun metodo)

Mas en http://www.rorsecurity.info/2007/05/19/sql-injection/ y
Ruby on Rails Security Cheatsheet - Ruby on Rails Security Project

Ricardo M. wrote:

En resumen :

Mal : Persona.find(:all, :conditions => “name = ‘#{nombre}’”)

Bien : Persona.find(:all, :conditions => [“name = ?”, nombre)

Si estas en lo correcto, pero creo que no se me entendio mi pregunta,
¿Como puedo conseguir esta cadena pero en un string? Hago esta pregunta
por que necesito esta consulta SQL formateada y ademas es mas segura
dentro de una variable para llamarla en un metodo que se ejecuta
directamente en la Base de Datos.

2008/1/29 Carlos R. [email protected]:

dentro de una variable para llamarla en un metodo que se ejecuta
directamente en la Base de Datos.

Si entiendomejor tu problema es que no sabes cuantos parametros vas a
tener
para armar el WHERE, verdad?

De [1] saco que podria ser una opcion :
query = [Array.new,Array.new]
query[0] << “column1 = ?”
query[1] << “bla”
query[0] << “column2 = ?”
query[1] << “plopp”

8. query[0] = query[0].join(" AND ")
9.
10. Bla.find(:all, :conditions )=> query

http://railsforum.com/viewtopic.php?pid=43304

On 29/01/2008, Ricardo M. [email protected] wrote:

por que necesito esta consulta SQL formateada y ademas es mas segura
dentro de una variable para llamarla en un metodo que se ejecuta
directamente en la Base de Datos.

Si entiendomejor tu problema es que no sabes cuantos parametros vas a tener
para armar el WHERE, verdad?

Creo que lo que Carlos quiere es saber cuál es el método que utiliza
Rails en las entrañas de find() para interpolar variables a partir de
un array como [sentencia_sql, vbl1, vbl2, …vbln],

Él quiere saber si es posible utilizar ese método en un array y
obtener la cadena SQL correspondiente, todo ello sin tener que
utilizar find() en ningún momento.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Creo que lo que Carlos quiere es saber cu�l es el m�todo que utiliza
Rails en las entra�as de find() para interpolar variables a partir de
un array como [sentencia_sql, vbl1, vbl2, …vbln],

�l quiere saber si es posible utilizar ese m�todo en un array y
obtener la cadena SQL correspondiente, todo ello sin tener que
utilizar find() en ning�n momento.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Si Manuel estas en lo correcto, parece que no me deje entender con la
pregunta

Alguien tiene la respuesta???

Por mi parte estare viendo el codigo de Rails :slight_smile: Viva el open source.

carakan.wiebia.com

Me doy respuesta a mi pregunta:

Se utiliza el metodo sanitize_sql_array() donde le pasamos el array del
tipo

[consulta_sql, parametros, …]

El cual devuelve un string con el remplazo de los ? dentro de la
consulta, por el valor de los parametros, esto se debe de realizar
dentro de los modelos y no asi dentro de los controladores.

Saludos.