MySQL vs MySQLi cuando se usa PHP [cerrado]

167

¿Qué es mejor, MySQL o MySQLi? ¿Y por qué? ¿Cuál debería usar?

Me refiero a mejor no solo en términos de rendimiento, sino de cualquier otra característica relevante.

anand.trex
fuente

Respuestas:

111

Si echa un vistazo a Descripción general de la extensión mejorada de MySQL , debería decirle todo lo que necesita saber sobre las diferencias entre los dos.

Las principales características útiles son:

  • una interfaz orientada a objetos
  • soporte para declaraciones preparadas
  • soporte para múltiples declaraciones
  • soporte para transacciones
  • capacidades mejoradas de depuración
  • soporte de servidor integrado.
Mark Davidson
fuente
1
sí, lo mejor es que mysqli admite declaraciones preparadas
jondinham
77
También debe tenerse en cuenta que MySQLi solo funciona con MySQL 5+. Esto ya no es realmente relevante, pero cuando salió MySQLi, MySQL 4 seguía siendo el estándar. Esto es parte de la razón por la cual las extensiones están separadas, ya que el antiguo controlador MySQL permanece allí por motivos de compatibilidad.
zneak
66
Vale la pena señalar que las cosas han cambiado mucho en seis años. mysql_*()ahora está en desuso y se eliminará pronto. No deberías usarlo para un nuevo código.
¿Cuál deberíamos elegir con menos CPU y RAM?
Mahdi Jazini
1
Ver la respuesta de Gordon a continuación. La antigua extensión mysql ya no es compatible, por lo que será mejor que uses la extensión mysqli de todos modos.
Mark Davidson
70

Hay una página de manual dedicada a ayudar a elegir entre mysql, mysqli y PDO en

El equipo de PHP recomienda mysqli o PDO_MySQL para nuevos desarrollos:

Se recomienda usar las extensiones mysqli o PDO_MySQL. No se recomienda utilizar la antigua extensión mysql para nuevos desarrollos. Una matriz de comparación de características detallada se proporciona a continuación. Se considera que el rendimiento general de las tres extensiones es casi el mismo. Aunque el rendimiento de la extensión aporta solo una fracción del tiempo de ejecución total de una solicitud web PHP. A menudo, el impacto es tan bajo como 0.1%.

La página también tiene una matriz de características que compara las API de extensión. Las principales diferencias entre mysqli y mysql API son las siguientes:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

Hay una matriz de características adicionales que compara las bibliotecas (nuevo mysqlnd versus libmysql) en

y un artículo de blog muy completo en

Gordon
fuente
15

He abandonado el uso de mysqli. Es simplemente demasiado inestable. He tenido consultas que bloquean PHP usando mysqli pero funcionan bien con el paquete mysql. También mysqli se bloquea en columnas LONGTEXT . Este error se ha planteado en varias formas desde al menos 2005 y permanece roto . Sinceramente, me gustaría usar declaraciones preparadas, pero mysqli simplemente no es lo suficientemente confiable (y nadie parece molestarse en arreglarlo). Si realmente quieres declaraciones preparadas, ve con DOP.

cletus
fuente
2
PDO tampoco es exactamente perfecto (me he encontrado con algunos desagradables problemas con él), pero al menos tiene una base de usuarios más amplia, por lo que probablemente sea una apuesta más segura.
troelskn
@troelskn, entonces, ¿no es normal mysql simplemente mejor?
Pacerier
@Pacerier Teniendo en cuenta que está en desuso, diría que no. En general, parece que PDO se ha convertido en la opción estándar.
troelskn
@troelskn, pero en desuso no significa nada, excepto que no estaría allí en futuras versiones. En términos de estabilidad, ¿no es normal mysql más estable?
Pacerier
1
En este punto (5.5) PHP emitirá advertencias activamente si lo usa: php.net/manual/en/migration55.deprecated.php
troelskn
13

MySQLi significa MySQL mejorado. Es una interfaz orientada a objetos para los enlaces MySQL que hace que las cosas sean más fáciles de usar. También ofrece soporte para declaraciones preparadas (que son muy útiles). Si estás en PHP 5 usa MySQLi.

Ross
fuente
5

Lo que es mejor es PDO; Es una interfaz menos cruda y también proporciona las mismas características que MySQLi.

Usar declaraciones preparadas es bueno porque elimina las posibilidades de inyección de SQL; usar declaraciones preparadas del lado del servidor es malo porque aumenta el número de viajes de ida y vuelta.

MarkR
fuente
3

Para mí, las declaraciones preparadas son una característica imprescindible. más exactamente, enlace de parámetros (que solo funciona en declaraciones preparadas). Es la única forma realmente sensata de insertar cadenas en los comandos SQL. Realmente no confío en las funciones de 'escape'. la conexión de la base de datos es un protocolo binario, ¿por qué usar un sub-protocolo limitado a ASCII para los parámetros?

Javier
fuente
1
PDO generalmente usa declaraciones preparadas del lado del cliente, por lo que no están realmente preparadas en el servidor, pero esto es bueno, ya que ahorra recursos del servidor y generalmente funciona mejor. La declaración preparada "emulación" siempre escapará de las cosas correctamente.
MarkR
1
"siempre" y "escapar" son palabras peligrosas cuando van juntos. No sé, quizás este código esté totalmente libre de errores; pero ¿por qué molestarse, cuando hay un protocolo binario real disponible? En cuanto al rendimiento, está abierto a la evaluación comparativa.
Javier