will the removed obsoletas mysql_select_db mysql_query mysql_pconnect mysql_connect las habilitas funciones extension and mysql deprecated php

the - mysql_query deprecated use mysqli



La extensión mysql está en desuso y se eliminará en el futuro: use mysqli o PDO en su lugar (1)

  1. ¿Por qué está pasando esto?

    Toda la ext/mysql PHP ext/mysql , que proporciona todas las funciones nombradas con el prefijo mysql_ , se desaprobó oficialmente en PHP v5.5.0 y se eliminó en PHP v7 .

    Se introdujo originalmente en PHP v2.0 (noviembre de 1997) para MySQL v3.20, y no se han agregado nuevas características desde 2006. Junto con la falta de nuevas características, existen dificultades para mantener un código tan antiguo en medio de vulnerabilidades de seguridad complejas.

    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 de 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 v5.0, por lo que si está utilizando una versión que está lanzando estos errores de desaprobación, entonces casi seguramente puede comenzar 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, incluido el soporte de API para transacciones, procedimientos almacenados y declaraciones preparadas (proporcionando así la mejor manera de vencer los ataques de inyección SQL ). El desarrollador de PHP Ulf Wendel ha escrito una comparación completa de las características .

    Hashphp.org tiene un excelente tutorial sobre la migración de ext/mysql a PDO .

  3. Entiendo que es posible suprimir los errores de error_reporting 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 utilizando la antigua ext/mysql por el momento. Pero realmente no deberías hacer esto: esta es una advertencia final de los desarrolladores de que la extensión puede no incluirse en futuras versiones de PHP (de hecho, como ya se mencionó, se ha eliminado de PHP v7). En su lugar, debe 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 los mensajes E_DEPRECATED , no solo aquellos que tienen que ver con la ext/mysql : por lo tanto, puede desconocer otros cambios futuros en PHP que afectarían el código de su aplicación. Por supuesto, es posible suprimir solo los errores que surgen en la expresión en cuestión utilizando el operador de control de errores de PHP, es decir, anteponiendo la línea relevante con @ sin embargo, esto suprimirá todos los errores provocados por esa expresión, no solo los E_DEPRECATED .

¿Qué deberías hacer?

  • Usted está comenzando un nuevo proyecto.

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

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

    Sería sensato realizar pruebas de regresión: no debería cambiar nada (especialmente la actualización de PHP) hasta que haya identificado todas las posibles áreas de impacto, planificadas en torno a cada una de ellas y luego probado exhaustivamente su solución en un entorno intermedio.

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

      Dedique media hora a reescribir este módulo para usar una de las otras extensiones más modernas; prueba a fondo. Luego puede introducir mejoras adicionales para cosechar los beneficios que ofrecen.

    • Los métodos de acceso a la base de datos están diseminados por todos lados y no pueden intercambiarse 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 los beneficios que ofrecen; también puede usarlo como una oportunidad para refactorizar sus métodos de acceso a la base de datos en una estructura más modular.

      Sin embargo, si tiene una necesidad urgente de actualizar PHP de inmediato, puede considerar la supresión de los errores de desaprobación por el momento: pero primero asegúrese de identificar cualquier otro error de desaprobación 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 lanzado correcciones, soluciones provisionales u orientación en relación con este problema específico; o, si no, presionarlos para que lo hagan al traer este asunto a su atención. Si tiene una necesidad urgente de actualizar PHP de inmediato, puede considerar la supresión de los errores de desaprobación por el momento: pero primero asegúrese de identificar cualquier otro error de desaprobación que también se esté lanzando.

    Es absolutamente esencial realizar pruebas de regresión.

Esta pregunta ya tiene una respuesta aquí:

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

Obsoleto: la extensión mysql está en desuso 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 problemas. De hecho, lo obtuve de un tutorial bien elaborado sobre PHP.

  1. ¿Por qué está pasando esto?

  2. ¿Cómo puedo arreglarlo?

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

    error_reporting = E_ALL ^ E_DEPRECATED

    ¿Qué pasará si hago eso?