Apa perbedaan antara mysql mysqli dan pdo_mysql?

Saya akan merekomendasikan menggunakan PDO dengan pernyataan yang sudah disiapkan. Ini adalah API yang dirancang dengan baik dan akan membuat Anda lebih mudah berpindah ke database lain (termasuk yang mendukung ODBC) jika perlu

————————————————————

Itu adalah perbedaan API untuk mengakses backend MySQL

  • mysql adalah API historis
  • mysqli adalah versi baru dari API historis, ia harus bekerja lebih baik dan memiliki serangkaian fungsi yang lebih baik, juga API berorientasi objek
  • PDO_MySQL, adalah MySQL untuk PDO, PDO telah diperkenalkan di PHP, proyek ini bertujuan untuk membuat API umum untuk semua akses basis data, jadi secara teori Anda harus dapat bermigrasi antar RDMS tanpa mengubah kode apa pun (jika Anda tidak

Jadi itu tergantung jenis kode apa yang ingin Anda hasilkan, jika Anda lebih suka lapisan berorientasi objek atau fungsi biasa…

Saat mengakses database di PHP, kita memiliki dua pilihan. MySQLi dan PDO. Jadi apa yang harus Anda ketahui sebelum memilih salah satunya?

Jika Anda sering bekerja dengan database di PHP, Anda mungkin ingin melihat berbagai skrip dan aplikasi berguna untuk MySQLi dan PDO di Envato Market

Aplikasi PDO di Envato Market

Ringkasan

Dukungan PDOMySQLiDatabase12 driver berbedaMySQL onlyAPIOOPOOP + proseduralConnectionEasyEasyNamed parameterYesNoObject mappingYesYesPernyataan yang disiapkan
(sisi klien)YaTidakKinerjaCepatCepatSimpan prosedurYaYa

Koneksi

Sangat mudah untuk terhubung ke database dengan keduanya

1// PDO 2$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 34// mysqli, procedural way 5$mysqli = mysqli_connect('localhost','username','password','database'); 6// PDO 0// PDO 1// PDO 2// PDO 3

Harap diperhatikan bahwa objek/sumber daya koneksi ini akan dianggap ada selama sisa tutorial ini

Dukungan API

Baik PDO dan MySQLi menawarkan API berorientasi objek, tetapi MySQLi juga menawarkan API prosedural - yang memudahkan pendatang baru untuk memahaminya. Jika Anda terbiasa dengan driver PHP MySQL asli, Anda akan menemukan bahwa migrasi ke antarmuka MySQLi prosedural jauh lebih mudah. Di sisi lain, setelah Anda menguasai PDO, Anda dapat menggunakannya dengan database apa pun yang Anda inginkan

Dukungan Basis Data

Keunggulan utama PDO dibandingkan MySQLi adalah dukungan driver basis datanya. Pada saat penulisan ini, PDO mendukung 12 driver berbeda, berlawanan dengan MySQLi, yang hanya mendukung MySQL

Untuk mencetak daftar semua driver yang didukung PDO saat ini, gunakan kode berikut

1// PDO 5

Apa artinya ini? . Jadi yang harus Anda lakukan hanyalah mengubah string koneksi dan beberapa kueri - jika mereka menggunakan metode apa pun yang tidak didukung oleh database baru Anda. Dengan MySQLi, Anda perlu menulis ulang setiap potongan kode - termasuk kueri

Parameter Bernama

Ini adalah fitur penting lain yang dimiliki PDO;

1// PDO 72// PDO 9321_______5_______235256________2______7// PDO 029// PDO 2// PDO 9____2______3____3

bertentangan dengan cara MySQLi

1$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 52233$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 94315336// PDO 9// PDO 037// PDO 2________4______9

Pengikatan parameter tanda tanya mungkin tampak lebih pendek, tetapi tidak sefleksibel parameter bernama, karena fakta bahwa pengembang harus selalu melacak urutan parameter;

Sayangnya, MySQLi tidak mendukung parameter bernama

Pemetaan Objek

Baik PDO dan MySQLi dapat memetakan hasil ke objek. Ini sangat berguna jika Anda tidak ingin menggunakan lapisan abstraksi basis data khusus, tetapi masih menginginkan perilaku seperti ORM. Bayangkan kita memiliki kelas // PDO _44 dengan beberapa properti, yang cocok dengan nama bidang dari database

141___________________43345447____7______________________________________________________________________

Tanpa pemetaan objek, kita perlu mengisi setiap nilai bidang (baik secara manual atau melalui konstruktor) sebelum kita dapat menggunakan metode // PDO 45 dengan benar

Hal ini memungkinkan kita untuk menentukan properti ini bahkan sebelum objek dibuat. Contohnya

1512// PDO 93// PDO 4575596// PDO 0$mysqli = mysqli_connect('localhost','username','password','database'); 2// PDO 2$mysqli = mysqli_connect('localhost','username','password','database'); 4$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 2// mysqli, procedural way 9// mysqli, procedural way 8$mysqli = mysqli_connect('localhost','username','password','database'); 8$mysqli = mysqli_connect('localhost','username','password','database'); 9606162636465// mysqli, procedural way 767// mysqli, procedural way 969// PDO 00// PDO 01// PDO 02// PDO 03// PDO 04// PDO 0564// PDO 07// mysqli, procedural way 7// PDO 09// mysqli, procedural way 9

Keamanan

Kedua perpustakaan menyediakan keamanan injeksi SQL, selama pengembang menggunakannya sesuai dengan yang dimaksudkan (baca. melarikan diri / pengikatan parameter dengan pernyataan yang disiapkan)

Katakanlah seorang peretas sedang mencoba menyuntikkan beberapa SQL berbahaya melalui parameter kueri HTTP 'nama pengguna' (GET)

1// PDO 12

Jika kami gagal menghindarinya, ini akan disertakan dalam kueri "sebagaimana adanya" - menghapus semua baris dari tabel // PDO 46 (PDO dan mysqli mendukung banyak kueri)

1// PDO 142// PDO 1634// PDO 195// PDO 216// PDO 23// PDO 0// PDO 25// PDO 2________3______2// PDO 28

Seperti yang Anda lihat, // PDO 47 tidak hanya lolos dari string, tetapi juga mengutipnya. Di sisi lain, // PDO _48 hanya akan lolos dari string;

1// PDO 302// PDO 323// PDO 3445// PDO 376// PDO 39// PDO 0// PDO 41// PDO 239

Saya menyarankan agar Anda selalu menggunakan pernyataan yang telah disiapkan dengan kueri terikat alih-alih P// PDO 49 dan // PDO 48

Pertunjukan

Meskipun PDO dan MySQLi cukup cepat, kinerja MySQLi jauh lebih cepat di benchmark - ~2. 5% untuk pernyataan yang tidak disiapkan, dan ~6. 5% untuk yang sudah jadi. Namun, ekstensi MySQL asli bahkan lebih cepat dari keduanya. Jadi, jika Anda benar-benar perlu memeras setiap kinerja terakhir, itu adalah satu hal yang dapat Anda pertimbangkan

Ringkasan

Pada akhirnya, PDO memenangkan pertempuran ini dengan mudah. Dengan dukungan untuk dua belas driver basis data yang berbeda (delapan belas basis data berbeda. ) dan parameter bernama, kita dapat mengabaikan kehilangan kinerja yang kecil, dan membiasakan diri dengan API-nya. Dari sudut pandang keamanan, keduanya aman selama pengembang menggunakannya sebagaimana mestinya (baca. pernyataan yang telah disiapkan)

Bisakah saya menggunakan PDO dan MySQLi?

Ya, itu mungkin . Data yang dimasukkan ke dalam basis data tidak peduli bagaimana data itu sampai di sana, atau bagaimana Anda mengeluarkannya kembali.

Apa perbedaan antara MySQL dan MySQLi?

Pada dasarnya, MySQL adalah driver basis data lama, dan MySQLi adalah driver yang Ditingkatkan . The "i" adalah singkatan dari "improved" sehingga MySQL ditingkatkan. MySQLi dapat dilakukan secara prosedural dan berorientasi objek sedangkan MySQL hanya dapat digunakan secara prosedural. Mysqli juga mendukung pernyataan siap yang melindungi dari SQL Injection.

Apa keunggulan PDO dibandingkan MySQL?

PDO lebih aman daripada dua opsi pertama dan juga lebih cepat dibandingkan dengan prosedural MySQLi dan berorientasi objek MySQLi.

Mana yang lebih cepat MySQLi atau PDO?

Pada dasarnya mereka menunjukkan bahwa untuk kueri SELECT menggunakan pernyataan yang disiapkan MySQLi berjalan sedikit lebih cepat . Tetap saja itu mungkin tidak signifikan tergantung pada tujuan Anda. Perlu diingat bahwa PDO secara default menggunakan emulasi pernyataan yang disiapkan sisi klien.

Postingan terbaru

LIHAT SEMUA