Cara migrasi mysql ke mysqli

berikut langsung aja singkat uraian mengenai koeksi mysql, dalam release php 5.0 ke atas untuk peggunaan mysql_connect sudah expired/deprected [tidak digunakan ] dengan alasan keamanan. untuk mengatasinya MySQL menyediakan dua opsi yakni pembaharuan MySQL yang juga sering disebut MySQL Improve yang disingkat dengan MySQLi dan juga PDO. namun kali ini yang akan saya bahas adalah MySQLi sebagai solusi deprected mysql_connect.Dari berita atau endapat banyak user MySQLi dikatakan juga lebih aman dalam segi scurity datanya, tapi juga banyak orang berpendapat lain bahwa keamanan data dari rogram tergantung penyusunan coding dari programmer itu sendiri yang bisa menimbulka celah keamanan.

langsung saja berikut saya berikan pengganti mysql_connect dengan MySQLi.

– format koneksi menggunakan MySQL standart
mysql_connect[‘server’,’usermysql’,’passwordmysql’];
mysql_select_db[‘nama_database’];

– format koneksi menggunakan MySQLi
$conn=mysqli_connect[‘server’,’usermysql’,’passwordmysql’,’nama_databse’];

penggunaan dalam query sql:

– format query dengan koneksi MySQL standart
mysql_query[“select * from nama_table”];

– format query dengan koneksi MySQLi
mysqli_query[$conn,”select * from nama_table”];

sederhana atau rumit tergantung pilihan anda sendiri,
selamat berkarya dan salam sukses selalu!

Sejak munculnya PHP 7, banyak fungsi-fungsi yang diperbarui dan juga dibuang. Untuk melihat apa yang ditambahkan dan apa yang di buang dari PHP 5.6.x ke PHP 7.0.x, silahkan buka sendiri di //php.net/manual/en/migration70.php 

Salah satu yang dibuang yaitu “php mysql”. Maka aplikasi PHP lama yang berjalan di php 5 kebawah yang masih melakukan query menggunakan fungsi php mysql harus di rombak menggunakan  MySQLi or PDO_MySQL jika ingin menggunakan PHP 7. Berikut perbandingan tiap versi php dan hhvm pada wordpress 4.1 [sumber : digitalocean.com]

Jika sang developernya atau pengelola yang bukan developernya rela berlama-lama buka code untuk mengganti fungsi-fungsi tersebut sih gak masalah. Tapi kalo lupa, puyeng, bahkan gak ngerti ya bisa-bisa ndak akan pernah di migrasi ke php 7. Untung sudah ada yang membuat library untuk mengkonversi PHP MySQL ke MySQLi. salah satunya dari website //mysql.dotpointer.com

silahkan kunjungi web tersebut. atau download file library berikut

mysql.php [33 kB, last update 2016-02-25 18:08:54]

[setelah download jangan lupa rename dan remove _.odt]. include file tersebut sebelum kode koneksi ke database.

Semoga membantu.

Panduan utama untuk memutakhirkan mysql_* Berfungsi untuk MySQLi API

Alasan untuk ekstensi mysqli baru adalah untuk mengambil keuntungan dari fitur-fitur baru yang ditemukan di sistem MySQL versi 4.1.3 dan yang lebih baru. Ketika mengubah kode Anda yang ada dari mysql_* Ke API mysqli Anda harus memanfaatkan perbaikan ini, jika upaya peningkatan Anda bisa sia-sia.
Ekstensi mysqli memiliki sejumlah manfaat, peningkatan utama atas ekstensi mysql adalah:

  • Antarmuka berorientasi objek
  • Dukungan untuk Pernyataan Disiapkan
  • Peningkatan kemampuan debugging

Ketika memutakhirkan dari mysql_* Berfungsi ke MySQLi, penting untuk mempertimbangkan fitur-fitur ini, serta beberapa perubahan dalam cara API ini harus digunakan.

1. Antarmuka berorientasi objek versus fungsi prosedural.

Antarmuka berorientasi objek mysqli baru adalah peningkatan besar atas fungsi yang lebih lama dan dapat membuat kode Anda lebih bersih dan kurang rentan terhadap kesalahan ketik. Ada juga versi prosedural dari API ini, tetapi penggunaannya tidak disarankan karena mengarah pada kode yang kurang mudah dibaca, yang lebih rentan terhadap kesalahan.

Untuk membuka koneksi baru ke database dengan MySQLi, Anda perlu membuat instance baru dari kelas MySQLi.

$mysqli = new \mysqli[$Host, $user, $password, $dbName];
$mysqli->set_charset['utf8mb4'];

Menggunakan gaya prosedural akan terlihat seperti ini:

$mysqli = mysqli_connect[$Host, $user, $password, $dbName];
mysqli_set_charset[$mysqli, 'utf8mb4'];

Ingatlah bahwa hanya 3 parameter pertama yang sama seperti pada mysql_connect. Kode yang sama di API lama adalah:

$link = mysql_connect[$Host, $user, $password];
mysql_select_db[$dbName, $link];
mysql_query['SET NAMES utf8'];

Jika kode PHP Anda mengandalkan koneksi implisit dengan parameter default yang didefinisikan dalam php.ini, Anda sekarang harus membuka koneksi MySQLi melewati parameter dalam kode Anda, dan kemudian memberikan tautan koneksi ke semua prosedural fungsi atau gunakan gaya OOP.

Untuk informasi lebih lanjut lihat artikel: Cara menghubungkan dengan benar menggunakan mysqli

2. Dukungan untuk Pernyataan yang Disiapkan

Ini yang besar. MySQL telah menambahkan dukungan untuk pernyataan yang disiapkan asli di MySQL 4.1 [2004]. Pernyataan yang disiapkan adalah cara terbaik untuk mencegah injeksi SQL . Itu hanya logis bahwa dukungan untuk pernyataan yang disiapkan asli ditambahkan ke PHP. Pernyataan yang disiapkan harus digunakan kapan pun data harus dikirimkan bersama dengan pernyataan SQL [mis. WHERE, INSERT atau UPDATE adalah kasus penggunaan yang biasa].

API MySQL yang lama memiliki fungsi untuk menghindari string yang digunakan dalam SQL yang disebut mysql_real_escape_string , tapi itu tidak pernah dimaksudkan untuk perlindungan terhadap injeksi SQL dan tentu saja tidak seharusnya t digunakan untuk tujuan tersebut.
MySQLi API baru menawarkan fungsi pengganti mysqli_real_escape_string untuk kompatibilitas mundur, yang menderita masalah yang sama seperti yang lama dan karenanya tidak boleh digunakan kecuali pernyataan yang disiapkan tidak tersedia.

Cara mysql_ * lama:

$login = mysql_real_escape_string[$_POST['login']];
$result = mysql_query["SELECT * FROM users WHERE user='$login'"];

Cara pernyataan yang disiapkan:

$stmt = $mysqli->prepare['SELECT * FROM users WHERE user=?'];
$stmt->bind_param['s', $_POST['login']];
$stmt->execute[];
$result = $stmt->get_result[];

Pernyataan yang disiapkan di MySQLi dapat terlihat sedikit mengecewakan bagi pemula. Jika Anda memulai proyek baru maka memutuskan untuk menggunakan yang lebih kuat dan lebih sederhana [~ # ~] pdo [~ # ~]] API mungkin ide yang bagus.

3. Peningkatan kemampuan debugging

Beberapa old-school PHP pengembang digunakan untuk memeriksa kesalahan SQL secara manual dan menampilkannya langsung di browser sebagai cara debugging. Namun, praktik tersebut ternyata tidak hanya rumit, tetapi juga risiko keamanan. Untungnya MySQLi telah meningkatkan kemampuan pelaporan kesalahan.

MySQLi dapat melaporkan kesalahan yang ditemui sebagai PHP pengecualian. PHP pengecualian akan muncul di dalam skrip dan jika tidak ditangani akan menghentikannya secara instan, yang berarti bahwa tidak ada pernyataan setelah kesalahan yang akan dieksekusi. Pengecualian akan memicu PHP Kesalahan fatal dan akan berperilaku sebagai kesalahan yang dipicu dari PHP inti mematuhi display_errors Dan pengaturan log_errors. Untuk mengaktifkan pengecualian MySQLi gunakan baris mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT] dan masukkan tepat sebelum Anda membuka koneksi DB.

mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT];
$mysqli = new \mysqli[$Host, $user, $password, $dbName];
$mysqli->set_charset['utf8mb4'];

Jika Anda terbiasa menulis kode seperti:

$result = mysql_query['SELECT * WHERE 1=1'];
if [!$result] {
    die['Invalid query: ' . mysql_error[]];
}

atau

$result = mysql_query['SELECT * WHERE 1=1'] or die[mysql_error[]];

anda tidak perlu lagi die[] dalam kode Anda.

mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT];
$mysqli = new \mysqli[$Host, $user, $password, $dbName];
$mysqli->set_charset['utf8mb4'];

$result = $mysqli->query['SELECT * FROM non_existent_table'];
// The following line will never be executed due to the mysqli_sql_exception being thrown above
foreach [$result as $row] {
    // ...
}

Jika karena alasan tertentu Anda tidak dapat menggunakan pengecualian, MySQLi memiliki fungsi yang setara untuk pencarian kesalahan. Anda dapat menggunakan mysqli_connect_error[] untuk memeriksa kesalahan koneksi dan mysqli_error[$mysqli] untuk kesalahan lainnya. Perhatikan argumen wajib dalam mysqli_error[$mysqli] atau alternatifnya tetap pada OOP gaya dan gunakan $mysqli->error.

$result = $mysqli->query['SELECT * FROM non_existent_table'] or trigger_error[$mysqli->error, E_USER_ERROR];

Lihat posting ini untuk penjelasan lebih lanjut:
mysqli atau mati, apakah harus mati?
Bagaimana mendapatkan informasi kesalahan MySQLi di lingkungan yang berbeda?

4. Perubahan lainnya

Sayangnya tidak semua fungsi dari mysql_* Memiliki pasangannya di MySQLi hanya dengan "i" yang ditambahkan dalam nama dan tautan koneksi sebagai parameter pertama. Berikut adalah daftar beberapa di antaranya:

  • mysql_client_encoding[] telah digantikan oleh mysqli_character_set_name[$mysqli]
  • mysql_create_db Tidak memiliki mitra. Gunakan pernyataan yang disiapkan atau mysqli_query Sebagai gantinya
  • mysql_drop_db Tidak memiliki mitra. Gunakan pernyataan yang disiapkan atau mysqli_query Sebagai gantinya
  • mysql_db_name & mysql_list_dbs Dukungan telah dibatalkan mendukung SQL SHOW DATABASES
  • mysql_list_tables Dukungan telah dibatalkan mendukung SQL SHOW TABLES FROM dbname
  • mysql_list_fields Dukungan telah dibatalkan mendukung SQL SHOW COLUMNS FROM sometable
  • mysql_db_query -> gunakan mysqli_select_db[] lalu kueri atau tentukan nama DB dalam kueri
  • mysql_fetch_field[$result, 5] -> parameter kedua [offset] tidak ada dalam mysqli_fetch_field. Anda dapat menggunakan mysqli_fetch_field_direct Dengan mengingat berbagai hasil yang dikembalikan
  • mysql_field_flags, mysql_field_len, mysql_field_name, mysql_field_table & mysql_field_type -> telah diganti dengan mysqli_fetch_field_direct
  • mysql_list_processes Telah dihapus. Jika Anda memerlukan ID utas, gunakan mysqli_thread_id
  • mysql_pconnect Telah diganti dengan mysqli_connect[] dengan p: Awalan host
  • mysql_result -> gunakan mysqli_data_seek[] bersamaan dengan mysqli_field_seek[] dan mysqli_fetch_field[]
  • mysql_tablename Dukungan telah dibatalkan mendukung SQL SHOW TABLES
  • mysql_unbuffered_query Telah dihapus. Lihat artikel ini untuk informasi lebih lanjut kueri Buffered dan Unbuffered

Bài mới nhất

Chủ Đề