mysql_real_escape_string frente a mysql_escape_string frente a otra función [cerrado]

yo suelo mysql_real_escape_string para una mejor seguridad. Para un mejor rendimiento de mysql, ahora estoy pensando en reemplazarlo.

Encontré una explicación detallada sobre mysql_real_escape_string y mysql_escape_string in mysql_escape_string VS mysql_real_escape_string.

Mi pregunta es:

Si uso una conexión persistente y conozco el juego de caracteres (solo UTF-8), ¿hay alguna forma de reemplazarlo? mysql_real_escape_string con algo que no use mysql?

preguntado el 03 de enero de 13 a las 18:01

No uses ninguno de ellos. los mysql_* las funciones serán obsoleto en PHP 5.5. No se recomienda para escribir código nuevo, ya que se eliminará en el futuro. En cambio, o bien el MySQLi or PDO y ser un mejor desarrollador de PHP. -

Para empezar, no debería usar las funciones mysql_*(). Cambie a mysqli o PDO y use declaraciones preparadas con marcadores de posición. El 99% de las veces, ni siquiera tendrás que ir a ningún lado CERCA para escapar de las cosas tú mismo. -

No va a optimizar las consultas mysql con mysql_real_escape_string. Si desea optimizar, busque en sus tablas mysql. Establezca los índices correctos y observe sus consultas. -

Sé que está en desuso en PHP 5.5, pero es una aplicación muy grande con una gran carga de tráfico. Definitivamente no se reescribirá a MySQLi ahora, esto se hará en una versión futura. -

Es probable que el problema por el que preguntas sea un problema personal. Dudo que sirva de algo preguntarlo aquí públicamente. Le sugiero que llame al soporte profesional de mysql en Oracle o en una empresa de consultoría profunda e independiente y obtenga respuestas a todas sus pequeñas preguntas e incluso el código fuente detrás de todo esto explicado en un lenguaje comprensible para usted. Eso debería ayudarlo a basar una decisión (personal) en (una empresa de consultoría profesional probablemente se negará a hacer una sugerencia de todos modos). -

2 Respuestas

Lo primero, STOP usar mysql_query y funciones relacionadas. Está en desuso en PHP 5.5 y generará advertencias cuando se use porque no debería usarlo en absoluto.

En segundo lugar, siempre utilizan el mysql_real_escape_string y solo eso para escapar de tus valores. Ni siquiera pienses en probar otro método. Es feo, molesto y solo una de las muchas razones por las que no deberías usar mysql_query para empezar. No ruede el suyo. No busque alternativas más rápidas porque no hay ninguna que sea segura de usar.

En la primera oportunidad posible, cambie a PDO. El costo de conversión puede ser significativo si su aplicación se encuentra en un estado grave de deterioro, pero si se aplica correctamente, de manera disciplinada, la posibilidad de tener un error de inyección SQL es casi nula.

Si tiene problemas de rendimiento con las funciones de escape, no tengo idea de lo que está haciendo, pero probablemente lo esté haciendo mal. Por lo general, tienen un costo cercano a cero, a menos que esté literalmente haciendo millones de ellos por carga de página. El tiempo de ejecución de la consulta que realiza casi siempre es significativamente más largo que el tiempo que lleva preparar la declaración en sí.

Respondido el 03 de enero de 13 a las 18:01

http://dev.mysql.com/doc/refman/5.5/en/apis-php-class.mysqli.html

Use consultas parametrizadas de la biblioteca MySQLi; anteriormente ha habido errores en la rutina de escape, y es posible que algunos vuelvan a aparecer. Parametrizar la consulta es mucho, mucho más difícil de estropear, por lo que es menos probable que se vea comprometido por un error de MySQL.

Respondido el 03 de enero de 13 a las 18:01

mysqli es bastante basura en comparación con PDO pero es mucho mejor que el viejo mysql_query - tadman

@tadman: Supéralo. Está muy bien, hace más que PDO e incluso tiene iteradores en PHP 5.4. Entonces, ¿cuál es realmente la diferencia donde es basura? (No digo que deba favorecerlo, hay razones para usar uno u otro, pero "ser basura" es simplemente incorrecto). - hakré

Funciona igual de bien en la práctica, pero PDO tiene soporte para marcadores de posición con nombre, lo que hace que la auditoría de sus declaraciones sea significativamente más fácil, evitando el problema de desordenar el orden de sus llamadas vinculantes. mysqli es una buena alternativa si la PDO no está disponible, pero de lo contrario no es mucho mejor. - tadman

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.