Risposta modificata.
Dopo aver avuto qualche esperienza con entrambe queste API, direi che ci sono 2 funzionalità di livello di blocco che rendono mysqli inutilizzabile con istruzioni preparate native.
Sono già stati menzionati in 2 risposte eccellenti (eppure sottovalutate):
- Valori vincolanti al numero arbitrario di segnaposto
- Restituzione dei dati come un semplice array
(entrambi menzionati anche in questa risposta )
Per qualche motivo mysqli non è riuscito con entrambi.
Oggi ha ottenuto alcuni miglioramenti per il secondo ( get_result ), ma funziona solo su installazioni mysqlnd, il che significa che non puoi fare affidamento su questa funzione nei tuoi script.
Eppure non ha vincoli per valore fino ad oggi.
Quindi, c'è solo una scelta: DOP
Tutti gli altri motivi, come ad esempio
- segnaposto nominati (questo zucchero di sintassi è molto sopravvalutato)
- supporto di database diversi (nessuno l'ha mai effettivamente utilizzato)
- recuperare in oggetto (solo zucchero di sintassi inutile)
- differenza di velocità (nessuna)
non hanno alcuna importanza significativa.
Allo stesso tempo, entrambe queste API mancano di alcune funzionalità davvero importanti , come
- segnaposto identificativo
- segnaposto per i tipi di dati complessi per rendere meno impegnativa l'associazione dinamica
- codice dell'applicazione più breve.
Quindi, per coprire le esigenze della vita reale , è necessario creare la propria libreria di astrazione, basata su una di queste API, implementando segnaposto analizzati manualmente. In questo caso preferirei mysqli, poiché ha un livello di astrazione minore.