MySQL vs MySQLi saat menggunakan PHP [ditutup]

167

Mana yang lebih baik, MySQL atau MySQLi? Dan mengapa? Yang mana yang harus saya gunakan?

Maksud saya lebih baik tidak hanya dalam hal kinerja, tetapi fitur lain yang relevan.

anand.trex
sumber

Jawaban:

111

Jika Anda melihat Ikhtisar Peningkatan MySQL , ia akan memberi tahu Anda semua yang perlu Anda ketahui tentang perbedaan antara keduanya.

Fitur bermanfaat utama adalah:

  • antarmuka berorientasi objek
  • dukungan untuk pernyataan yang disiapkan
  • dukungan untuk banyak pernyataan
  • dukungan untuk transaksi
  • peningkatan kemampuan debugging
  • dukungan server tertanam.
Mark Davidson
sumber
1
ya, yang terbaik adalah bahwa mysqli mendukung pernyataan yang disiapkan
jondinham
7
Perlu dicatat juga bahwa MySQLi hanya berfungsi dengan MySQL 5+. Ini tidak benar-benar relevan lagi, tetapi ketika MySQLi keluar, MySQL 4 masih standar. Ini adalah bagian dari alasan ekstensi terpisah, driver MySQL lama tetap ada untuk tujuan kompatibilitas.
zneak
6
Perlu dicatat bahwa banyak hal telah berubah dalam enam tahun. mysql_*()sudah tidak digunakan lagi dan akan segera dihapus . Anda tidak boleh menggunakannya untuk kode baru.
Mana yang harus kita pilih dengan lebih sedikit CPU dan RAM?
Mahdi Jazini
1
Lihat jawaban Gordon di bawah ini. Ekstensi mysql lama tidak lagi didukung sehingga Anda akan lebih baik menggunakan ekstensi mysqli.
Mark Davidson
70

Ada halaman manual yang didedikasikan untuk membantu memilih antara mysql, mysqli dan PDO di

Tim PHP merekomendasikan mysqli atau PDO_MySQL untuk pengembangan baru:

Disarankan untuk menggunakan ekstensi mysqli atau PDO_MySQL. Tidak disarankan untuk menggunakan ekstensi mysql lama untuk pengembangan baru. Matriks perbandingan fitur terperinci disediakan di bawah ini. Kinerja keseluruhan dari ketiga ekstensi tersebut dianggap hampir sama. Meskipun kinerja ekstensi hanya berkontribusi sebagian kecil dari total waktu menjalankan permintaan web PHP. Seringkali, dampaknya serendah 0,1%.

Halaman ini juga memiliki matriks fitur yang membandingkan API ekstensi. Perbedaan utama antara mysqli dan mysql API adalah sebagai berikut:

                               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

Ada matriks fitur tambahan yang membandingkan perpustakaan (mysqlnd baru versus libmysql) di

dan artikel blog yang sangat teliti di

Gordon
sumber
15

Saya telah meninggalkan menggunakan mysqli. Itu terlalu tidak stabil. Saya sudah punya pertanyaan yang membuat crash PHP menggunakan mysqli tetapi berfungsi baik dengan paket mysql. Juga mysqli mogok di kolom LONGTEXT . Bug ini telah dimunculkan dalam berbagai bentuk sejak setidaknya 2005 dan tetap rusak . Jujur saya ingin menggunakan pernyataan yang disiapkan tetapi mysqli tidak cukup dapat diandalkan (dan tampaknya tidak ada yang mau memperbaikinya). Jika Anda benar-benar ingin pernyataan yang disiapkan, pergi dengan PDO.

cletus
sumber
2
PDO juga tidak terlalu sempurna (saya sudah menjalankan beberapa coredump jahat dengannya), tetapi setidaknya ia memiliki basis pengguna yang lebih luas, jadi mungkin ini taruhan yang lebih aman.
troelskn
@troelskn, jadi bukankah mysql yang normal hanya lebih baik?
Pacerier
@ Paser Menimbang bahwa itu sudah usang, saya akan mengatakan tidak. Secara umum, tampaknya PDO telah menjadi pilihan standar.
troelskn
@troelskn, tetapi usang tidak berarti apa-apa kecuali bahwa itu tidak akan ada di versi mendatang. Dalam hal stabilitas, bukankah mysql yang normal lebih stabil?
Pacerier
1
Pada titik ini (5,5) PHP secara aktif akan mengeluarkan peringatan jika Anda menggunakannya: php.net/manual/en/migration55.deprecated.php
troelskn
13

MySQLi adalah singkatan dari MySQL ditingkatkan. Ini adalah antarmuka berorientasi objek ke binding MySQL yang membuat hal-hal lebih mudah digunakan. Ini juga menawarkan dukungan untuk pernyataan yang disiapkan (yang sangat berguna). Jika Anda menggunakan PHP 5, gunakan MySQLi.

Ross
sumber
5

Apa yang lebih baik adalah PDO; itu antarmuka yang kurang kekar dan juga menyediakan fitur yang sama dengan MySQLi.

Menggunakan pernyataan yang disiapkan itu baik karena menghilangkan kemungkinan injeksi SQL; menggunakan pernyataan yang disiapkan pihak server buruk karena meningkatkan jumlah perjalanan pulang pergi.

MarkR
sumber
3

bagi saya, pernyataan yang disiapkan adalah fitur yang harus dimiliki. lebih tepatnya, pengikatan parameter (yang hanya berfungsi pada pernyataan yang disiapkan). itu satu-satunya cara yang benar-benar waras untuk memasukkan string ke dalam perintah SQL. saya benar-benar tidak mempercayai fungsi 'melarikan diri'. koneksi DB adalah protokol biner, mengapa menggunakan sub-protokol ASCII terbatas untuk parameter?

Javier
sumber
1
PDO biasanya menggunakan pernyataan yang disiapkan oleh sisi klien, sehingga mereka tidak benar-benar siap di server - tetapi ini bagus, karena menghemat sumber daya server dan biasanya berkinerja lebih baik. Pernyataan "persaingan" yang disiapkan akan selalu lolos dengan benar.
MarkR
1
"selalu" dan "melarikan diri" adalah kata-kata berbahaya ketika pergi bersama. saya tidak tahu, mungkin kode ini benar-benar bebas bug; tapi mengapa repot, ketika protokol biner nyata tersedia? Adapun kinerja, itu terbuka untuk pembandingan.
Javier