php remove html - mysqli o DOP: ¿cuáles son los pros y los contras?





6 Answers

Mover una aplicación de una base de datos a otra no es muy común, pero tarde o temprano puede que esté trabajando en otro proyecto utilizando un RDBMS diferente. Si está en casa con DOP, entonces habrá al menos una cosa que aprender en ese momento.

Aparte de eso, encuentro que la API de DOP es un poco más intuitiva y se siente más orientada a los objetos. mysqli siente que es solo una API de procedimiento que se ha objetivado, si sabes a qué me refiero. En resumen, me parece más fácil trabajar con la DOP, pero eso es, por supuesto, subjetivo.

tags strip_tags ejemplo

En nuestro lugar, estamos divididos entre el uso de mysqli y PDO para cosas como declaraciones preparadas y soporte de transacciones. Algunos proyectos usan uno, otros el otro. Hay pocas posibilidades realistas de que nos mudemos a otro RDBMS.

Prefiero PDO por la única razón de que permite parámetros con nombre para declaraciones preparadas, y hasta donde sé, mysqli no lo hace.

¿Existen otros pros y contras para elegir uno sobre el otro como estándar a medida que consolidamos nuestros proyectos para utilizar solo un enfoque?




La DOP es el estándar, es lo que la mayoría de los desarrolladores esperan usar. mysqli fue esencialmente una solución a medida para un problema particular, pero tiene todos los problemas de las otras bibliotecas específicas de DBMS. DOP es donde irá todo el trabajo duro y el pensamiento inteligente.




Otra diferencia notable (buena) acerca de la DOP es que su método PDO::quote() agrega automáticamente las comillas mysqli::real_escape_string() , mientras que mysqli::real_escape_string() (y similares) no:

PDO :: quote () coloca comillas alrededor de la cadena de entrada (si es necesario) y escapa de los caracteres especiales dentro de la cadena de entrada, utilizando un estilo de cita apropiado para el controlador subyacente.




En el sentido de la velocidad de ejecución, MySQLi gana, pero a menos que tenga un buen envoltorio que use MySQLi, sus funciones relacionadas con las declaraciones preparadas son terribles.

Todavía hay errores en la mía, pero si alguien lo quiere, aquí está .

En resumen, si está buscando una ganancia de velocidad, entonces MySQLi; Si quieres facilidad de uso, entonces DOP.




Respuesta editada.

Después de tener alguna experiencia con estas dos API, diría que hay dos funciones de nivel de bloqueo que hacen que mysqli sea inutilizable con declaraciones preparadas de forma nativa.
Ya se mencionaron en 2 respuestas excelentes (aunque infravaloradas):

  1. Valores vinculantes a número arbitrario de marcadores de posición
  2. Devolviendo datos como una simple matriz

(ambos también mencionados en esta respuesta )

Por alguna razón mysqli falló con ambos.
Hoy en día se mejoró el segundo ( get_result ), pero funciona solo en las instalaciones de mysqlnd, lo que significa que no puede confiar en esta función en sus scripts.

Sin embargo, no tiene una vinculación por valor, incluso hasta el día de hoy.

Entonces, solo hay una opción: DOP

Todas las otras razones, tales como

  • marcadores de posición nombrados (esta sintaxis de azúcar está sobrevalorada)
  • Soporte de bases de datos diferentes (en realidad nadie lo usó)
  • Fetch en objeto (sólo azúcar sintaxis inútil)
  • diferencia de velocidad (no hay ninguna)

No tienen ninguna importancia significativa.

Al mismo tiempo, estas dos API carecen de algunas características realmente importantes , como

  • identificador de posición
  • marcador de posición para los tipos de datos complejos para que la vinculación dinámica sea menos complicada
  • 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.




Una cosa que PDO tiene que MySQLi no me gusta es la capacidad de PDO de devolver un resultado como un objeto de un tipo de clase específico (por ejemplo, $pdo->fetchObject('MyClass') ). Fetch_object fetch_object() de fetch_object() solo devolverá un objeto stdClass .






Related