La extensión mysql está obsoleta y se eliminará en el futuro: use mysqli o PDO en su lugar [duplicate]


Esta pregunta ya tiene una respuesta aquí:

Cuando intento conectarme a un servidor MySQL desde PHP, veo el siguiente error:

Obsoleta: La extensión mysql está obsoleta y se eliminará en el futuro: use mysqli o PDO en su lugar en /path/to/filename.php en la línea 123

El código en la línea referenciada es:

mysql_connect($server, $username, $password);

Estoy seguro de que los argumentos son correctos, y este código exacto ha estado funcionando durante años sin problema. De hecho, lo obtuve de un tutorial bien basado en PHP.

  1. ¿Por qué está pasando esto?

  2. ¿Cómo puedo arreglarlo?

  3. Entiendo que es posible suprimir los errores de obsolescencia configurando error_reporting en php.ini para excluir E_DEPRECATED:

    error_reporting = E_ALL ^ E_DEPRECATED
    

    ¿Qué será ¿pasará si hago eso?

Author: eggyal, 2012-12-19

1 answers

  1. ¿Por qué sucede esto?

    La extensión completa de PHP ext/mysql, que proporciona todas las funciones nombradas con el prefijo mysql_, fue oficialmente obsoleta en PHP v5.5.0 y eliminada en PHP v7.

    Se introdujo originalmente en PHP v2.0 (noviembre de 1997) para MySQL v3.20, y no se han añadido nuevas características desde 2006. Junto con la falta de nuevas características, hay dificultades para mantener un código tan antiguo en medio de una seguridad compleja vulnerabilidad.

    El manual contiene advertencias contra su uso en el nuevo código desde junio de 2011.

  2. ¿Cómo puedo arreglarlo?

    Como sugiere el mensaje de error, hay otras dos extensiones MySQL que puede considerar: MySQLi y PDO_MySQL, cualquiera de las cuales se puede usar en lugar de ext/mysql. Ambos han estado en el núcleo de PHP desde la v5. 0, por lo que si está utilizando una versión que está lanzando estos errores de obsolescencia, casi puede ciertamente, simplemente comience a usarlos de inmediato, es decir, sin ningún esfuerzo de instalación.

    Difieren ligeramente, pero ofrecen una serie de ventajas sobre la antigua extensión, incluyendo soporte de API para transacciones, procedimientos almacenados y declaraciones preparadas (proporcionando así la mejor manera para derrotar ataques de inyección SQL). El desarrollador de PHP Ulf Wendel ha escrito una comparación exhaustiva de las características.

    Hashphp.org tiene un excelente tutorial sobre migrar de ext/mysql a la DOP.

  3. Entiendo que es posible suprimir errores de obsolescencia configurando error_reporting en php.ini para excluir E_DEPRECATED:

    error_reporting = E_ALL ^ E_DEPRECATED
    

    ¿Qué pasará si hago eso?

    Sí, es posible suprimir dichos mensajes de error y continuar usando la antigua extensión ext/mysql por el momento. Pero usted realmente no debe hacer esto - esta es una advertencia final de los desarrolladores que la extensión no puede ser incluido con futuras versiones de PHP (de hecho, como ya se mencionó, se ha eliminado de PHP v7). En su lugar, debería aprovechar esta oportunidad para migrar su aplicación ahora, antes de que sea demasiado tarde.

    Tenga en cuenta también que esta técnica suprimirá todos E_DEPRECATED mensajes, no solo aquellos que tienen que ver con la extensión ext/mysql: por lo tanto, es posible que no esté al tanto de otros cambios futuros en PHP que afectarían el código de su aplicación. Es, por supuesto, posible suprimir solamente los errores que surge en la expresión en cuestión usando el operador de control de errores de PHP-es decir, anteponiendo la línea relevante con @-sin embargo esto suprimirá todos los errores planteados por esa expresión, no solo los E_DEPRECATED.


¿Qué debes hacer?

  • Estás empezando un nuevo proyecto.

    No hay absolutamente ninguna razón para usar ext/mysql - elija una de las otras extensiones, más modernas, en su lugar y coseche las recompensas de los beneficios que ofrecen.

  • Tienes (tu propia) base de código heredada que actualmente depende de ext/mysql.

    Sería aconsejable realizar pruebas de regresión: realmente no debería cambiar nada (especialmente actualizar PHP) hasta que haya identificado todas las áreas potenciales de impacto, planificadas alrededor de cada una de ellas y luego probado a fondo su solución en un entorno de ensayo.

    • Siguiendo una buena codificación en la práctica, su aplicación se desarrolló de una manera vagamente integrada/modular y los métodos de acceso a la base de datos son todos autónomos en un solo lugar que se puede intercambiar fácilmente por una de las nuevas extensiones.

      Pase media hora reescribiendo este módulo para usar una de las otras extensiones, más modernas; pruebe a fondo. Más tarde puede introducir mejoras adicionales para cosechar las recompensas de los beneficios que ofrecen.

    • Los métodos de acceso a la base de datos son dispersos por todo el lugar y no se pueden intercambiar fácilmente por una de las nuevas extensiones.

      Considere si realmente necesita actualizar a PHP v5.5 en este momento.

      Debería comenzar a planear reemplazar ext/mysql con una de las otras extensiones más modernas para que pueda cosechar las recompensas de los beneficios que ofrecen; también podría usarla como una oportunidad para refactorizar sus métodos de acceso a la base de datos en una estructura más modular.

      Sin embargo, si usted tiene una urgente necesita actualizar PHP de inmediato, podría considerar suprimir los errores de obsolescencia por el momento: pero primero asegúrese de identificar cualquier otro error de obsolescencia que también se esté lanzando.

  • Está utilizando un proyecto de terceros que depende de ext/mysql.

    Considere si realmente necesita actualizar a PHP v5.5 en este momento.

    Compruebe si el desarrollador ha publicado alguna corrección, solución u orientación en relación con esta cuestión específica; o, si no, presionarlos para que lo hagan señalando este asunto a su atención. Si tiene una urgente necesidad de actualizar PHP de inmediato, podría considerar suprimir los errores de obsolescencia por el momento: pero primero asegúrese de identificar cualquier otro error de obsolescencia que también esté siendo lanzado.

    Es absolutamente esencial realizar pruebas de regresión.

 172
Author: eggyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:35