¿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
Respuesta
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.
Esa expresión regular no funcionará para caracteres Unicode – Smudge
@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. –
@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
Uso
De cualquier uso muestran columnas o describir consulta. y validar el resultado.
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";
}
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.
buena respuesta, excepto ¿cómo comprobarías una cadena alfanumérica que no puede tener el primer carácter como número? –
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 **. –
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 –
- 1. El nombre de columna no es válido. [Nombre del nodo (si lo hay) = t0, Nombre de la columna = versión]
- 2. Error de "nombre de columna no válido" en la declaración SQL de los resultados de OpenQuery
- 3. Excepción de SQL Server: "El nombre de columna xxx no es válido" cuando se usa JDBC
- 4. Cambiar el nombre de la columna en SQL Server 2008
- 5. cómo cambiar el nombre de la columna con T-SQL
- 6. Cambiar el nombre de la columna en SQL Server
- 7. Verificar una cadena para un nombre de directorio válido
- 8. Nombre de columna inválido en la actualización del servidor sql después de crear la columna
- 9. Error de SQL que indica el nombre de columna no válido cuando tengo la verificación si existe. ¿Por qué?
- 10. es `date` un nombre de columna mysql válido?
- 11. por eso que dice "java.sql.SQLException: nombre de columna no válido"
- 12. Código EF primer nombre de columna no válido "CategoryCategoryID"
- 13. Verificar gravatar válido (PHP)
- 14. Verificar IMEI válido
- 15. Seleccionar servidor SQL * Ordenar nombre de columna
- 16. sql seleccionar con nombre de columna como
- 17. nombre de la columna ambiguo
- 18. SQL Duplicar nombre de la columna de error
- 19. ¿Cómo puedo usar el nombre de la tabla en un alias de columna en Access SQL?
- 20. IllegalArgumentException: columna no válido
- 21. ¿Cómo recuperar el valor de la columna de resultado SQL usando el nombre de la columna en Python?
- 22. MySQL - Cambiar el nombre de la columna
- 23. "fecha" como un nombre de columna
- 24. ¿Cómo verificar NULL en MySqlDataReader por el nombre de la columna?
- 25. SQL Server Nombre de columna inválido después de agregar una nueva columna
- 26. nombre de la columna ambiguo de error
- 27. LINQ a SQL tiene la columna de palabras clave como nombre de columna, como citar/escapar
- 28. Para cambiar el nombre de la columna en DB2
- 29. ¿Cómo seleccionar una columna en SQL Server con un carácter especial en el nombre de columna?
- 30. Extrayendo [] alrededor de la columna en SQL Server 2005
para mysql sus tablas INFORMATION_SCHEMA consulta –
¿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? –
@Shakti la última –