Respuesta editada
Después de tener algo de experiencia con ambas API, diría que hay 2 características de nivel de bloqueo que hacen que mysqli sea inutilizable con declaraciones preparadas nativas.
Ya se mencionaron en 2 respuestas excelentes (aunque subestimadas):
- Valores de enlace a un número arbitrario de marcadores de posición
- Devolver datos como una simple matriz
(ambos también mencionados en esta respuesta )
Por alguna razón, mysqli falló con ambos.
Hoy en día obtuvo algunas mejoras para el segundo ( get_result ), pero solo funciona en instalaciones mysqlnd, lo que significa que no puede confiar en esta función en sus scripts.
Sin embargo, no tiene vinculación por valor, incluso hasta el día de hoy.
Entonces, solo hay una opción: DOP
Todas las otras razones, como
- marcadores de posición nombrados (este azúcar de sintaxis está sobrevalorado)
- Soporte de bases de datos diferentes (en realidad nadie lo usó)
- buscar en el objeto (solo azúcar de sintaxis inútil)
- diferencia de velocidad (no hay ninguna)
no son de importancia significativa.
Al mismo tiempo, estas dos API carecen de algunas características realmente importantes , como
- marcador de posición de identificador
- marcador de posición para los tipos de datos complejos para hacer que el enlace dinámico sea menos engorroso
- Código de aplicación más corto.
Entonces, para cubrir las necesidades de la vida real , uno tiene que crear su propia biblioteca de abstracción, basada en una de estas API, implementando marcadores de posición analizados manualmente. En este caso, preferiría mysqli, ya que tiene un menor nivel de abstracción.