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

Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?
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');
3
4
// 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

Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?

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

7
2
// PDO

9
3
2
1_______5_______
2
3
5
2
5
6
________2______7
// PDO

0
2
9
// PDO

2
// PDO

9____2______3____3

bertentangan dengan cara MySQLi

1
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
5
2
2
3
3
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
9
4
3
1
5
3
3
6
// PDO

9
// PDO

0
3
7
// 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

1
4
1___________________
4
3
3
4
5
4
4
7____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

1
5
1
2
// PDO

9
3
// PDO

4
5
7
5
5
9
6
// 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');
9
6
0
6
1
6
2
6
3
6
4
6
5
// mysqli, procedural way

7
6
7
// mysqli, procedural way

9
6
9
// PDO

00
// PDO

01
// PDO

02
// PDO

03
// PDO

04
// PDO

05
6
4
// PDO

07
// mysqli, procedural way

7
// PDO

09
// mysqli, procedural way

9


Keamanan

Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?
Apa perbedaan antara mysql mysqli dan pdo_mysql?

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

14
2
// PDO

16
3
4
// PDO

19
5
// PDO

21
6
// 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

30
2
// PDO

32
3
// PDO

34
4
5
// PDO

37
6
// PDO

39
// PDO

0
// PDO

41
// PDO

2
3
9

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.