Resposta editada.
Após ter alguma experiência com essas duas APIs, eu diria que existem 2 recursos de nível de bloqueio que tornam o mysqli inutilizável com instruções nativas preparadas.
Eles já foram mencionados em 2 respostas excelentes (ainda que subestimadas):
- Vinculando valores a um número arbitrário de espaços reservados
- Retornando dados como uma mera matriz
(ambos também mencionados nesta resposta )
Por alguma razão, o mysqli falhou com ambos.
Hoje em dia, houve algumas melhorias para o segundo ( get_result ), mas funciona apenas em instalações mysqlnd, significa que você não pode confiar nessa função em seus scripts.
No entanto, ele não tem vinculação por valor até hoje.
Portanto, há apenas uma opção: DOP
Todos os outros motivos, como
- espaços reservados nomeados (esse açúcar de sintaxe é superestimado)
- suporte a diferentes bancos de dados (ninguém realmente o usou)
- buscar no objeto (apenas açúcar inútil de sintaxe)
- diferença de velocidade (não há nenhuma)
não são de nenhuma importância significativa.
Ao mesmo tempo, essas duas APIs carecem de alguns recursos realmente importantes , como
- espaço reservado identificador
- espaço reservado para os tipos de dados complexos para tornar a ligação dinâmica menos trabalhosa
- código de aplicação mais curto.
Portanto, para cobrir as necessidades da vida real , é necessário criar sua própria biblioteca de abstração, com base em uma dessas APIs, implementando espaços reservados analisados manualmente. Neste caso, eu preferiria o mysqli, pois possui um nível menor de abstração.