Apa perbedaan antara mysqli dan mysql (usang)?

Seperti yang kita ketahui bersama, MySQL adalah Open Source Relational Database Management System (RDBMS) yang menggunakan Structured Query Language (SQL). MySQL adalah komponen utama dari tumpukan perangkat lunak aplikasi Web Sumber Terbuka LAMP (dan tumpukan "AMP" lainnya). Apache MySQL dan PHP

MySQL adalah bagian penting dari hampir setiap aplikasi Open Source PHP. Contoh bagus untuk skrip berbasis PHP dan MySQL adalah phpBB, osCommerce, dan Joomla

PHP dulu datang dengan ekstensi MySQL asli built-in yang mendukung dengan versi MySQL yang lebih lama. Namun ekstensi ini sudah tidak digunakan lagi karena MySQLi (i untuk ditingkatkan). Pada saat yang sama PHP terus berkembang dan ekstensi PDO (PHP Data Objects) diperkenalkan menjadi antarmuka umum untuk mengakses berbagai jenis database.

MySQLi adalah salah satu dari tiga cara untuk mengakses server database MySQL. Seperti ekstensi MySQL, MySQLi baru dirancang untuk lebih memanfaatkan fitur server MySQL yang lebih baru

Ekstensi PHP Data Objects (PDO) mendefinisikan antarmuka umum yang ringan untuk mengakses database di PHP. Setiap driver basis data yang didukung oleh antarmuka PDO dapat menampilkan fitur khusus basis data, serta fungsi-fungsi umum

PDO menyediakan lapisan abstraksi akses data, yang berarti bahwa, apa pun jenis database yang Anda gunakan, fungsi yang sama tersedia untuk melakukan kueri dan mengambil hasil. PDO tidak menyediakan abstraksi basis data lengkap. saya. e. itu tidak menulis ulang kueri SQL atau meniru fitur yang hilang. Anda harus menggunakan paket lapisan abstraksi lengkap jika Anda membutuhkan kemampuan itu

2. Perbedaan Menghubungkan Menggunakan MySQLi dan PDO

Baik PDO dan MySQLi menawarkan antarmuka Berorientasi Objek ke fungsi ekstensi tetapi MySQLi juga menawarkan API prosedural, yang memudahkan pendatang baru untuk memahaminya. Jika Anda terbiasa dengan ekstensi PHP MySQL asli, Anda akan menemukan migrasi ke antarmuka MySQLi prosedural lebih mudah. Di bawah ini adalah contohnya

// PDO
$pdo = new PDO( "mysql:" . "host=localhost;" . "dbname=database", 'username', 'password');
// mysqli, procedural way
$mysqli = mysqli_connect( 'localhost', 'username', 'password', 'database');
// mysqli, object oriented way
$mysqli = new mysqli( 'localhost', 'username', 'password', 'database');

Keuntungan utama PDO dibandingkan MySQLi adalah dukungan database. PDO mendukung 12 jenis database berbeda, berlawanan dengan MySQLi, yang hanya mendukung MySQL

Saat Anda harus mengalihkan proyek Anda untuk menggunakan database lain, PDO membuat prosesnya lebih sederhana. Jadi yang harus Anda lakukan hanyalah mengubah string koneksi dan paling banyak beberapa kueri jika mereka menggunakan sintaks apa pun yang tidak didukung oleh database baru Anda

3. Keamanan PDO vs MysQLi menggunakan Pernyataan yang Disiapkan

Baik PDO dan MySQLi memberikan dukungan untuk kueri yang disiapkan. Ini membantu mencegah masalah keamanan injeksi SQL, selama Anda hanya menggunakan kueri yang disiapkan untuk memasukkan parameter dinamis dalam kueri

Misalnya, pertimbangkan peretas yang mencoba menginjeksi SQL jahat dengan meneruskan nilai palsu ke kode parameter permintaan HTTP POST yang dapat diemulasi seperti ini

$_POST['code'] = "'; DELETE FROM products; /*";
_

Jika Anda tidak lolos dari nilai ini, nilai ini akan dimasukkan ke dalam kueri apa adanya, sehingga akan menghapus semua baris dari tabel produk

Salah satu cara untuk membuat kueri lebih aman menghindari injeksi SQL adalah mengutip nilai parameter string untuk menyisipkan karakter escape

// PDO, �manual� escaping
$name = PDO::quote( $_POST['code'] );
$pdo->query( "SELECT id, name FROM products WHERE code = $code" );
// mysqli, �manual� escaping
$name = mysqli_real_escape_string( $_POST['code'] );
$mysqli->query( "SELECT id, name FROM products WHERE name = '$code'" );

PDO. quote() tidak hanya lolos dari string, tetapi juga menambahkan tanda kutip. mysqli_real_escape_string() hanya akan keluar dari string, jadi Anda perlu menambahkan tanda kutip secara manual

// PDO, prepared statement
$pdo->prepare( 'SELECT id, name FROM products WHERE code = :code' );
$pdo->execute( array( ':code' => $_POST['code'] ) );
// mysqli, prepared statements
$query = $mysqli->prepare('SELECT id, name FROM users WHERE code = ?');
$query->bind_param('s', $_POST['code']);
$query->execute();

PDO juga mendukung permintaan sisi klien. Ini berarti bahwa ketika menyiapkan kueri, ia tidak harus berkomunikasi dengan server

Karena MySQLi menggunakan pernyataan yang disiapkan asli, sebenarnya akan lebih cepat menggunakan mysqli_real_escape_string daripada menggunakan pernyataan yang disiapkan, meskipun ini masih merupakan solusi yang aman

4. PDO vs MySQLi vs Tolok Ukur Kinerja MySQL

Ada beberapa tes benchmark kinerja PHP MySQL beberapa tahun lalu oleh Jonathan Robson juga oleh Radu Potop. Padahal tes ini dilakukan dengan PHP 5. 3 dan saat ini kami menggunakan PHP 7 atau lebih baru, mari pertimbangkan hasil ini sebagai referensi

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. Saat menggunakan pernyataan yang disiapkan asli, ada perjalanan bolak-balik tambahan ke server untuk menyiapkan pernyataan, sehingga keseluruhan waktu eksekusi kueri mungkin sebenarnya lebih besar daripada saat menggunakan pernyataan yang disiapkan asli untuk menjalankan kueri hanya sekali

Seperti disebutkan di atas, Anda dapat menggunakan fungsi mysqli_real_escape_string untuk mengutip parameter dinamis seperti yang akan Anda lakukan saat menggunakan ekstensi MySQL asli. Ini seperti meniru kueri yang sudah disiapkan seperti yang dilakukan dengan PDO karena Anda tidak perlu melakukan perjalanan bolak-balik tambahan ke server untuk menyiapkan pernyataan

5. Perbandingan antara Ketentuan Penggunaan PDO dan MySQLi

Sementara MySQLi memiliki kelebihan dalam mengakses fitur server MySQL, PDO terkadang memiliki keunggulan dan mungkin lebih cocok untuk pengguna, tergantung pada preferensi dan kenyamanan pribadi. Seperti kebanyakan hal, opsi yang berfungsi paling baik bergantung pada siapa Anda bertanya dan untuk situasi apa Anda memerlukan MySQLi atau PDO

MySQLi hanya bekerja dengan database MySQL, sedangkan PDO fleksibel dan dapat bekerja dengan banyak sistem database, termasuk IBM, Oracle, dan MySQL. Jika Anda harus mengganti basis data atau menyediakan solusi independen basis data, menggunakan MySQLi secara langsung bukanlah pilihan terbaik. Anda masih dapat menggunakan MySQLi dalam solusi independen basis data menggunakan lapisan abstraksi

Mengikat parameter dengan MySQLi tidak semudah atau sefleksibel dengan PDO. MySQLi menggunakan sistem parameter bernomor dan tidak mendukung parameter bernama seperti PDO. MySQLi memiliki dukungan dan pemeliharaan yang baik, membuat transisi ke dan menggunakan sistem baru dengan aman dan terjamin

Anda akan dapat memanfaatkan fitur-fitur baru yang tersedia di versi server MySQL yang lebih baru. Ini adalah salah satu keuntungan terbesar dari MySQLi. PDO mungkin tidak memiliki dukungan ekstensif untuk memanfaatkan sepenuhnya kemampuan MySQL yang lebih baru

Proses instalasi dengan MySQLi tidak hanya mudah, tetapi otomatis ketika ekstensi PHP 5 MySQL yang disertakan dengan distribusi Windows atau Linux bawaan

6. Konversi Aplikasi MySQL untuk Menggunakan PDO atau MySQLi

Jika Anda memiliki proyek yang menggunakan ekstensi MySQL lama dan Anda perlu mengonversinya untuk menggunakan MySQLi atau PDO, mungkin perlu beberapa saat untuk menulis ulang jika Anda tidak menggunakan lapisan abstraksi basis data

Jika Anda memerlukan solusi cepat dan mudah yang tidak perlu mengubah banyak kode, Anda dapat mencoba paket PDO atau MySQLi untuk menggunakan masing-masing ekstensi ini melalui fungsi pembungkus MySQL yang memanggil fungsi mysql_* menggunakan PDO oleh Aziz . Hussain atau PHP MySQL ke MySQLi oleh Dave Smith untuk fungsi ekstensi PDO dan MySQLi

Ini akan memungkinkan Anda untuk membuat kode Anda berjalan di PHP 7 saat Anda melakukan migrasi nyata dari kode yang tidak memerlukan pembungkus

Dave Smith juga telah menulis tutorial tentang cara memigrasikan kode mysql ke mysqli dengan mempertimbangkan perbedaan antara ekstensi tersebut

7. Rekomendasi Paket untuk digunakan dengan PDO dan MySQLi

Ada banyak paket yang dapat Anda gunakan untuk berbagai keperluan untuk mengakses MySQL baik menggunakan MySQLi maupun PDO

Di bawah ini adalah beberapa paket PHP terbaru yang menyediakan pembungkus yang aman dan efisien untuk beberapa tujuan PDO

Pencadangan PDO dan Sinkronisasi Basis Data

PHP Multi MySQLDump (Alessandro Quintiliani)

Buang tabel database MySQL untuk pengunduhan file

Pencadangan PHP ke Server WebDav (Dmitry Mamontov)

Cadangkan file dan database ke server WebDav

Tabel Sinkronisasi Basis Data PHP (Ettore Moretti)

Sinkronkan tabel antara dua database menggunakan PDO

Kelas Cadangan DB (Raul)

Hasilkan cadangan basis data MySQL menggunakan PDO

Sinkronisasi Basis Data PHP (Jacob Fogg)

Sinkronkan tabel database yang berbeda dengan PDO

Basis Data Pencadangan MySQLi

Cadangan MySQL Damen (Gerry Damen)

Buat cadangan database pernyataan SQL menggunakan MySQLi

Ah MySQLi (Atabak Hosein Nia)

Jalankan kueri umum MySQL menggunakan MySQLi

DBMysqli (Osama Salama)

Akses database MySQL dengan mysql dan mysqli

Keamanan dan Otentikasi PDO

Pembuat Token Aman PHP (Aleksandar Zivanovic)

Membuat dan memvalidasi token yang disimpan di tabel MySQL

Login OTP PHP (Bijaya Kumar Behera)

Otentikasi pengguna menggunakan alamat MAC komputer

Keamanan dan Otentikasi MySQLi

Pustaka PHP OAuth API dengan Klien Contoh Tutorial untuk Semua Server OAuth1 dan OAuth2 (Manuel Lemos)

Otorisasi dan akses API menggunakan OAuth

Registrasi dan Login Pengguna PDO

Sistem Login PHP Aman (Subin Siby)

Daftarkan dan login pengguna menggunakan database melalui PDO

Kelas Autentikasi PHP (Konvertor)

Daftarkan dan login pengguna yang disimpan dalam database

Login dan Pendaftaran Aman PHP (Ashraf Gheith)

Daftarkan dan login pengguna dalam database dengan PDO

Akses dan Abstraksi Basis Data PDO

Beberapa Iterator PDOStatement PHP (Matthew Daniel)

Ulangi beberapa hasil kueri menggunakan PDO

PHP PDO OCI (Eustaquio Rangel de Oliveira)

Akses database Oracle menggunakan pembungkus kelas PDO

Model Abstrak DB (Guillermo Murillo)

Jalankan kueri MySQL dengan memanggil prosedur tersimpan

Akses dan Abstraksi Database MySQLi

Metabase (Manuel Lemos)

Lapisan abstraksi basis data PHP RDBMS independen

Server API PHP CRUD REST (Bharat Parmar)

Server REST API dengan operasi CRUD berbasis MySQLi

MySQLi yang diperluas ()

Pembungkus akses basis data MySQL menggunakan MySQLi

PDO ORM (Pemetaan Obyek-Relasional)

Framework PHP ORM kecil (Victor Bolshov)

Petakan objek ke database menggunakan kueri yang tersusun

Caribu ORM (Maik Greubel)

Memetakan objek ke catatan basis data menggunakan anotasi

ORM Kentang (Adeniyi Ibrahim)

Simpan dan ambil objek dalam database menggunakan ORM

tom (Eustaquio Rangel)

Menyimpan dan mengambil objek menggunakan ActiveRecord

SlimDb (Marcelo Entraigas)

Akses tipe database yang berbeda menggunakan PDO

MySQLi ORM (Pemetaan Obyek-Relasional)

Akselerator DB (Yazan Tommalieh)

Memetakan catatan tabel MySQL ke objek menggunakan MySQLi

8. Apa yang Digunakan dalam Proyek Baru. PDO atau MySQLi?

Sementara PDO mungkin sedikit lebih lambat dan tidak memanfaatkan sepenuhnya fitur server MySQL, mungkin lebih mudah untuk menulis lebih sedikit kode yang bergantung pada basis data sambil memiliki kode yang lebih mudah dibaca menggunakan parameter bernama untuk kueri yang disiapkan. Jadi pilihan mana pun mungkin bagus tergantung pada apa yang Anda hargai

Artikel ini mencoba memberikan beberapa kriteria yang harus Anda pertimbangkan saat memutuskan mana yang terbaik untuk Anda

Jika Anda menyukai artikel ini, rekomendasikan kepada pengembang lain menggunakan tombol suka dan bagikan di halaman ini. Jika Anda memiliki pertanyaan atau komentar, kirim komentar di bawah ini

Apa perbedaan antara MySQLi dan MySQL?

MySQLi mendukung antarmuka prosedural dan antarmuka berorientasi objek sementara MySQL hanya mendukung antarmuka prosedural . MySQLi mendukung prosedur tersimpan tetapi MySQL tidak. Ada keamanan yang ditingkatkan dan fitur debugging yang ditingkatkan di MySQLi di mana ini relatif tertinggal di MySQL.

Apakah MySQLi tidak digunakan lagi di PHP 7?

Yang tertua menggunakan ekstensi MySQL, yang tidak digunakan lagi pada PHP 5. 5 dan dihapus sepenuhnya di PHP 7 . Fungsi mysql() tidak lagi berfungsi di PHP 7.

Manakah dari ekstensi PHP berikut untuk MySQL yang sudah tidak digunakan lagi?

PHP 7 telah menghapus dukungan untuk ekstensi mysql dan memengaruhi hal berikut. Permintaan apa pun yang menggunakan fungsi mysql_connect tidak akan berfungsi. PHP 7 hanya mengizinkan koneksi ke database MySQL menggunakan mysqli atau PDO_MySQL.

Apa perbedaan antara MySQLi dan PDO?

Seperti yang dinyatakan sebelumnya, PDO dan MySQLi sangat mirip, tetapi ada sedikit perbedaan dalam sintaks. MySQLi mengikuti konvensi snake_case PHP jadul, sementara PDO menggunakan camelCase . Selain itu, metode MySQLi digunakan sebagai properti objek, sedangkan PDO menggunakan sintaks tradisional untuk fungsi.