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)
¿Por qué está pasando esto?
Toda la
ext/mysql
PHPext/mysql
, que proporciona todas las funciones nombradas con el prefijomysql_
, 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.
¿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 .Entiendo que es posible suprimir los errores de
error_reporting
configurandoerror_reporting
enphp.ini
para excluirE_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 laext/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 losE_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í:
- ¿Por qué no debería usar mysql_ * funciones en PHP? 14 respuestas
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.
¿Por qué está pasando esto?
¿Cómo puedo arreglarlo?
Entiendo que es posible suprimir los errores de
error_reporting
configurandoerror_reporting
enphp.ini
para excluirE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
¿Qué pasará si hago eso?