Pregunta

Tengo un sistema de registro que solicita un nombre de usuario. Algunas personas tienen un apóstrofe en su apellido y se está impidiendo que los datos se escriban en la tabla de base de datos MySQL (por ejemplo O'Hare).

Estoy utilizando mysql_real_escape_string que está quitando el apóstrofo de la cadena. Esto estaría bien, excepto que necesito para usar el valor con el apóstrofe contra un servicio Web, de lo contrario el servicio web retornará falsa.

Yo estaba pensando que podía hacer la verificación del nombre con el Servicio Web antes de usar mysql_real_escape_string, pero pude presente una falla de seguridad? O lo hacen de servicios web SOAP ya lo hacen sus propios controles para las entradas limpias?

O hay una mejor manera de pasar a través de la variable de PHP mediante el cual retiene el apóstrofe, pero aún lo mantiene seguro y MySQL puede aceptarlo?

¿Fue útil?

Solución

Se debe mostrarnos algo de código, porque mysql_real_escape_string no quitará un apóstrofe, pero sólo escapar de ellos.
Escapar medios O'Hare se convertirá en O\'Hare de manera que se puede insertar como una cadena: 'O\'Hare'. Tras la recuperación de la base de datos, su valor debe seguir siendo el O'Hare originales.

Por lo tanto, si el apóstrofe es 'perdido' probablemente hay un error en otra parte de la lógica del programa.

La otra opción es pasar del uso de la biblioteca de MySQL a la MySQLi o biblioteca PDO para acceder a su base de datos. Las dos últimas declaraciones de apoyo preparado. declaraciones preparadas son generalmente considerados como la mejor práctica para la consulta de la base de datos.

Otros consejos

mysql_real_escape_string() no eliminará apóstrofes.

Su problema es probable que en el lado de salida, o alguna otra función de jugar con la entrada.

Es necesario tener una base de datos abierta la conexión antes de utilizar mysql_real_escape_string o no funcionará correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top