¿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.
¿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.
Respuestas:
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:
mysql_*()
ahora está en desuso y se eliminará pronto. No deberías usarlo para un nuevo código.
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
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.
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.
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?