Verificar el nombre válido de la columna SQL

¿Cómo comprobaría en php que una cadena es un nombre de columna compatible válido para una statement sql? solo una coincidencia de cuerdas.

En última instancia, cada cadena es un nombre de columna válido una vez que está entre comillas dobles (es posible que MySQL no obedezca a esa regla según la configuración. No utiliza comillas dobles como citas de identificador en la instalación predeterminada).

Sin embargo, si quieres ser multiplataforma (como sugieren las diferentes tags DBMS), debes buscar el mínimo común denominador.

El manual de PostgreSQL tiene una buena definición de esto:

Los identificadores de SQL y las palabras clave deben comenzar con una letra (az, pero también letras con signos diacríticos y letras no latinas) o un guión bajo (_). Los caracteres subsiguientes en un identificador o palabra clave pueden ser letras, guiones bajos, dígitos (0-9) o signos de dólar ($). Tenga en cuenta que los signos de dólar no están permitidos en los identificadores según la letra del estándar SQL, por lo que su uso podría hacer que las aplicaciones sean menos portátiles.

Por lo tanto, debe verificar lo siguiente con una expresión regular:

  • comienza con una letra
  • solo contiene caracteres (letras) y dígitos y un guión bajo

Entonces, una expresión regular como la siguiente debería cubrir esto:

^[a-zA-Z_][a-zA-Z0-9_]*$

Como SQL no distingue entre mayúsculas y minúsculas (a menos que se utilicen comillas dobles), se permiten letras mayúsculas y minúsculas.

Puede usar la consulta de MySQL de la siguiente manera para obtener los campos de una tabla particular:

 SHOW FIELDS FROM tbl_name 

y luego un PHP simple:

 $string_to_check = 'sample'; $valid = false; $q = mysql_query("SHOW FIELDS FROM tbl_name"); while($row = mysql_fetch_object($q)) { if($row->Field == $string_to_check) { $valid = true; break; } } if($valid) { echo "Field exists"; } 

Utilizar

O use mostrar columnas o describir consulta. y que validar desde el resultado.

Si tuviera la misma pregunta, buscaría en la documentación de la base de datos particular para la lista de ciertos caracteres y luego lo implementaría en forma de expresiones regulares.

Pero nunca me gustaría hacer esa pregunta porque los caracteres latinos básicos, los números y el guión bajo son más que suficientes para nombrar cualquier campo que use. Así que mantendría una gran portabilidad y facilidad de mantenimiento.