2012-06-01 14 views
5

Por lo tanto, necesito usar PHP para extraer los nombres de campo y los valores de la instrucción where de una consulta sql, cámbielos y vuelva a armarlos.Interpretando SQL con PHP

Por lo tanto, digamos que me da esta cadena: field='value' AND field2<7 Necesito reconocer el campo y el campo2 como nombres de campo, luego alimentarlos a través de la función field() y ponerlos nuevamente en la consulta. Lo mismo con 'valor' y 7, pero alimentarlos a través de una función value(). También ayudaría saber con qué campo se asoció cada valor.

¿Hay alguna manera de hacer esto que no tome unos miles de líneas para codificar?

lo necesito para trabajar con una gran cantidad de diferentes entradas posibles, incluyendo cosas como: table.field BETWEEN 7 AND 10 o field<7 AND (field2=3 OR field3=4)

+0

¿Necesita algo reutilizable o puede simplemente modificarlo con sustitutos de cadenas? – acme

+1

¿Cuál es el contexto? Si el dominio es limitado, puede usar una expresión regular. Si necesita trabajar con cualquier consulta arbitraria, deberá usar un analizador SQL. – Matthew

+0

Tiene que funcionar para una amplia variedad de posibles entradas, si puede hacerlo con reemplazos de cadena que funcionarían, pero creo que es más complejo de lo que permitirían los reemplazos de cadena. –

Respuesta

4

He usado el proyecto php-sql-parser que es de código abierto y bastante bueno.

+0

¿Puede analizar SQL rápidamente? El tiempo es un problema aquí, sería un problema si tardara unos segundos por consulta. –

+0

No lo sé. Tendría que hacer un perfil en su aplicación para ver si es lo suficientemente rápido para las necesidades de su negocio. – mellamokb

+1

El script de ejemplo proporcionado en el sitio tiene un comprobador de velocidad. Estos son los tiempos de análisis que obtuve con 'example.php': ** Consulta simple 0.0025022029876709 segundos **, ** Declaración muy simple 0.0020349025726318 segundos **, ** Declaración altamente compleja 0.025777816772461 segundos ** – Deltik