sql >> Base de Datos >  >> RDS >> Mysql

¿Puedo reemplazar ciegamente todas las funciones mysql_ con mysqli_?

La respuesta corta es no , las funciones no son equivalentes.

La buena noticia es que hay una herramienta de conversión que te ayudará si tienes muchas llamadas/proyectos que cambiar. Esto permitirá que sus scripts funcionen de inmediato.

https://github.com/philip/MySQLConverterTool

Es una versión bifurcada de la versión original de Oracle y es kosher.

Dicho esto, no es demasiado difícil actualizar su código, y es posible que desee migrar a una metodología orientada a objetos de todos modos...

1) La conexión

Para todos los efectos, necesita una nueva función de conexión que guarde la conexión como una variable de PHP, por ejemplo;

$mysqli = new mysqli($host, $username, $password, $database);

Observe que guardé la conexión en $mysqli . Puede guardar en $db o lo que quieras, pero debes usar esto en todo tu código para hacer referencia a la conexión.

Recuerde habilitar el informe de errores para mysqli antes de abrir la conexión;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) La Consulta

Nota:debe protegerse contra la inyección de SQL con sentencias preparadas, que están disponibles en MySQLi. Eche un vistazo a ¿Cómo puedo evitar la inyección de SQL en PHP? , pero solo voy a cubrir lo básico aquí.

Ahora debe incluir la conexión como argumento en su consulta y otros mysqli_ funciones En el código de procedimiento es el primer argumento, en OO lo escribes como un método de clase.

de procedimiento:

$result = mysqli_query($mysqli, $sql);

OO:

$result = $mysqli->query($sql);

3) Obtener resultado

La obtención del resultado es similar al antiguo mysql_ función en procedimental;

while ($row = mysqli_fetch_assoc($result))

pero como $result ahora es un objeto en mysqli, puede usar la llamada de función de objeto;

while ($row = $result->fetch_assoc())

4) Cerrar conexión

Entonces, como antes, debe incluir la conexión en la función de cierre; como argumento de procedimiento;

mysqli_close($mysqli);

y como el objeto en el que ejecuta la función en OO;

$mysqli->close();

Estaría aquí para siempre si los revisara todos, pero entiendes la idea. Eche un vistazo a la documentación para más información. No olvide convertir cualquier función de cierre de conexión, publicación de resultados o error y conteo de filas que tenga.

La regla general básica es que para las funciones que usan la conexión de la base de datos, debe incluirla en la función ahora (ya sea como el primer argumento en el procedimiento o el objeto que usa para llamar a la función en OO), o para un conjunto de resultados simplemente puede cambiar la función a mysqli_ o use el conjunto de resultados como el objeto.