2011-02-12 17 views
23

¿Cómo comprobaría en php que una cadena es un nombre válido de columna compatible para una instrucción sql? solo una coincidencia de cadenas.Verificar el nombre válido de la columna SQL

+1

para mysql sus tablas INFORMATION_SCHEMA consulta –

+0

¿Qué quiere decir con válido? ¿Quiere decir que la cadena existe como una columna en la tabla DB? o ¿Quiere decir que la base de datos admite esta cadena como nombre de columna? –

+0

@Shakti la última –

Respuesta

36

En definitiva, cada cadena es un nombre de columna válido una vez que está entre comillas dobles (MySQL puede no obedecer a esa regla dependiendo de 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 etiquetas DBMS), debes buscar el mínimo común denominador.

El PostgreSQL manual has a nice definition de esto:

identificadores de SQL y palabras clave deben comenzar con una letra (a-z, sino también letras con signos diacríticos y caracteres no latinos) 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 las muestras de dólar no están permitidos en los identificadores de acuerdo con la letra de la norma SQL, por lo que su uso puede hacer que las aplicaciones menos portátiles

lo que debe comprobar lo siguiente con una expresión regular:

  • aperturas con una carta
  • contiene solamente caracteres (letras y dígitos) y un guión bajo

lo tanto una expresión regular como el siguiente debe cubrir esto:

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

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

+0

Esa expresión regular no funcionará para caracteres Unicode – Smudge

+2

@Smudge: los caracteres Unicode no están permitidos para los identificadores que no están entre comillas. Y una vez que utiliza un identificador entre comillas no necesita una expresión regular, porque todo está permitido cuando cita el nombre. –

+1

@a_horse_with_no_name Bueno, tiene sentido. Lo que realmente estaba pensando era que no es compatible con las supuestas "letras no latinas" y "letras con marcas diacríticas" que dicha cita de PostgreSQL afirma como válida. Hoy sucedió que estaba golpeando una cadena de expresiones regulares similar que también afectó el soporte de Unicode. – Smudge

0

Uso

De cualquier uso muestran columnas o describir consulta. y validar el resultado.

1

Usted puede utilizar la consulta de MySQL de la siguiente manera para obtener los campos de una tabla en particular:

SHOW FIELDS FROM tbl_name 

y algo más simple PHP:

$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"; 
} 
-2

si hubiera tenido la misma pregunta, Buscaría documentación de la base de datos particular para la cierta lista de caracteres y luego la 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.

+0

buena respuesta, excepto ¿cómo comprobarías una cadena alfanumérica que no puede tener el primer carácter como número? –

+1

Nunca verificaría, amigo.Crear una tabla de base de datos dinámicamente, basada en una fuente desconocida, sería ** lo menos que haría **. –

+1

No estoy creando una tabla dinámicamente, simplemente estoy asegurándome en un módulo independiente de que la variable de entrada interna se parece a un nombre de columna, ya sabe, aserciones –

Cuestiones relacionadas