MySQL vs MySQLi quando si utilizza PHP [chiuso]


167

Qual è meglio, MySQL o MySQLi? E perché? Quale dovrei usare?

Intendo meglio non solo in termini di prestazioni, ma di qualsiasi altra caratteristica rilevante.

Risposte:


111

Se dai un'occhiata alla panoramica dell'estensione migliorata di MySQL , dovrebbe dirti tutto ciò che devi sapere sulle differenze tra i due.

Le principali funzioni utili sono:

  • un'interfaccia orientata agli oggetti
  • supporto per dichiarazioni preparate
  • supporto per più dichiarazioni
  • supporto per le transazioni
  • funzionalità di debug avanzate
  • supporto server incorporato.

1
sì, la cosa migliore è che mysqli supporta dichiarazioni preparate
jondinham,

7
Va anche notato che MySQLi funziona solo con MySQL 5+. Questo non è più rilevante, ma quando uscì MySQLi, MySQL 4 era ancora lo standard. Questo è parte del motivo per cui le estensioni sono separate, il vecchio driver MySQL è rimasto lì per motivi di compatibilità.
zneak,

6
Vale la pena notare che le cose sono cambiate molto in sei anni. mysql_*()è ora obsoleto e verrà rimosso presto. Non dovresti usarlo per il nuovo codice.

Quale dovremmo scegliere con meno CPU e RAM?
Mahdi Jazini,

1
Vedi la risposta di Gordon sotto. La vecchia estensione mysql non è più supportata, quindi sarà comunque meglio usare l'estensione mysqli.
Mark Davidson,

70

C'è una pagina di manuale dedicata per aiutare a scegliere tra mysql, mysqli e DOP su

Il team di PHP consiglia mysqli o PDO_MySQL per i nuovi sviluppi:

Si consiglia di utilizzare le estensioni mysqli o PDO_MySQL. Non è consigliabile utilizzare la vecchia estensione mysql per nuovi sviluppi. Di seguito viene fornita una matrice di confronto delle funzionalità dettagliata. Le prestazioni complessive di tutte e tre le estensioni sono considerate pressoché identiche. Sebbene le prestazioni dell'estensione contribuiscano solo a una frazione del tempo di esecuzione totale di una richiesta Web PHP. Spesso l'impatto è minimo dello 0,1%.

La pagina ha anche una matrice di funzionalità che confronta le API di estensione. Le principali differenze tra API mysqli e mysql sono le seguenti:

                               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

C'è una matrice di funzionalità aggiuntiva che confronta le librerie (new mysqlnd contro libmysql) su

e un articolo di blog molto approfondito su


15

Ho abbandonato usando mysqli. È semplicemente troppo instabile. Ho avuto domande che bloccano PHP usando mysqli ma funzionano bene con il pacchetto mysql. Anche mysqli si arresta in modo anomalo sulle colonne LONGTEXT . Questo bug è stato sollevato in varie forme almeno dal 2005 e rimane rotto . Vorrei sinceramente usare dichiarazioni preparate, ma mysqli non è abbastanza affidabile (e nessuno sembra preoccuparsi di risolverlo). Se vuoi davvero dichiarazioni preparate vai con DOP.


2
Anche il PDO non è esattamente perfetto (mi sono imbattuto in alcuni cattivi coredump con esso), ma almeno ha una base di utenti più ampia, quindi probabilmente è una scommessa più sicura.
troelskn,

@troelskn, quindi il mysql normale non è solo meglio?
Pacerier,

@Pacerier Considerando che è deprecato, direi di no. In generale, sembra che la DOP sia diventata la scelta standard.
troelskn,

@troelskn, ma deprecato non significa nulla se non che non ci sarebbe nelle versioni future. In termini di stabilità, il mysql normale non è più stabile?
Pacerier,

1
A questo punto (5.5) PHP emetterà attivamente avvisi se lo si utilizza: php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLi sta per MySQL migliorato. È un'interfaccia orientata agli oggetti con i collegamenti MySQL che rende le cose più facili da usare. Offre inoltre supporto per dichiarazioni preparate (che sono molto utili). Se sei su PHP 5 usa MySQLi.


5

Ciò che è meglio è DOP; è un'interfaccia meno rigida e offre anche le stesse funzionalità di MySQLi.

L'uso di istruzioni preparate è utile perché elimina le possibilità di iniezione SQL; l'uso delle istruzioni preparate sul lato server è negativo perché aumenta il numero di round trip.


3

per me, le dichiarazioni preparate sono una caratteristica indispensabile. più precisamente, associazione di parametri (che funziona solo su istruzioni preparate). è l'unico modo veramente sano di inserire stringhe nei comandi SQL. non mi fido davvero delle funzioni di "fuga". la connessione DB è un protocollo binario, perché usare un sub-protocollo limitato ASCII per i parametri?


1
In genere, PDO utilizza istruzioni preparate sul lato client, quindi non sono realmente preparate sul server, ma ciò è positivo, poiché consente di risparmiare risorse del server e di solito offre prestazioni migliori. L'affermazione preparata "emulazione" sfuggirà sempre alle cose correttamente.
Mark R,

1
"sempre" e "fuga" sono parole pericolose quando vanno insieme. non lo so, forse questo codice è totalmente privo di bug; ma perché preoccuparsi, quando è disponibile un vero protocollo binario? per quanto riguarda le prestazioni, è aperto al benchmarking.
Javier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.