Setelah depresiasi (deprecated) ekstensi PHP MySQL pada tahun 2011, orang-orang secara perlahan mulai upgrade ke metode yang lebih baik seperti PDO atau MySQLi untuk berinteraksi dengan database. baik PDO maupun MySQLi adalah versi lebih baik dan menawarkan API yang berorientasi pada obyek dan peningkatan beberapa perbaikan daripada MySql biasa.
Kita semua tahu, bukan merupakan tugas mudah untuk beralih dari satu sistem ke sistem lain apalagi itu menyangkut website besar.
Tetapi jika kita berencana bermigrasi ke salah satunya (PDO atau Mysqli), terlebih dahulu Anda harus melakukan penelitian untuk mengetahui mana yang sesuai dengan kebutuhan Anda.
Jika Anda berencana menggunakan database seperti Oracle, MS SQL, dll, PDO adalah pilihan yang tepat untuk Anda, karena PDO mendukung 12 database driver yang berbeda sedangkan Mysqli hanya mendukung MySQL.
Tapi jika Anda hanya menggunakan MySQL dan hanya menggunakan MySQL artinya Anda tidak akan beralih ke database lain, maka sebaiknya Anda harus menggunakan Mysqli.
Di artikel ini tidak dibahas mengenai yang terbaik dari PDO atau Mysqli, disini akan dibahas penggunaan dasar dari Mysqli.
So, Saya ingin menunjukan kepada Anda bagaimana kita dapat dengan mudah mengkoneksikan, memilih, memasukan, dan meng-update record menggunakan extensi PHP Mysqli.
INSTALASI MYSQLI
Jika Anda menjalankan PHP versi 5.3.0 ke atas, maka Mysqli sudah otomatis aktif, tapi di PHP versi sebelumnya 5.0, 5.1, 5.2, extensi mysqli tidak aktif secara otomatis di system Windows, Anda harus mengaktifkan php_mysqli.dll didalam konfigurasi php.ini.
Untuk mengaktifkannya, edit php.ini dan hapus tanda ; (semi-colon) di awal tulisan extension=php_mysqli.dll, untuk detail lainnya tentang instalasi mysqli ini bisa dibaca di
sini.
MENGHUBUNGKAN KE DATABASE
Mysqli memberikan 2 cara untuk menghubungkan ke database, yaitu procedural dan object oriented, direkomendasikan menggunakan object oriented.
//procedural style
$mysqli = mysqli_connect('host','username','password','database_name');
//object oriented style (recommended)
$mysqli = new mysqli('host','username','password','database_name');
Berikut adalah cara membuka koneksi database dengan ‘style object oriented’ yang merupakan cara yang direkomendasikan dan yang akan digunakan dalam semua contoh di artikel ini.
//Open a new connection to the MySQL server
$mysqli = new mysqli('host','username','password','database_name');
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
SELECT Multiple Records sebagai Array Asosiatif
Berikut adalah contoh script untuk mengambil beberapa data sebagai array asosiatif.
//Open a new connection to the MySQL server
$mysqli = new mysqli('host','username','password','database_name');
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
//MySqli Select Query
$results = $mysqli->query('SELECT id, product_code, product_desc, price FROM products');
print '<table border="1">';
while($row = $results->fetch_assoc()) {
print '<tr>';
print '<td>'.$row['id'].'</td>';
print '<td>'.$row['product_code'].'</td>';
print '<td>'.$row['product_name'].'</td>';
print '<td>'.$row['product_desc'].'</td>';
print '<td>'.$row['price'].'</td>';
print '</tr>';
}
print '</table>';
// Frees the memory associated with a result
$results->free();
// close connection
$mysqli->close();
SELECT Multiple Records sebagai Objek
Berikut adalah contoh script untuk mengambil beberapa data sebagai objek.
//Open a new connection to the MySQL server
$mysqli = new mysqli('host','username','password','database_name');
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
//MySqli Select Query
$results = $mysqli->query('SELECT id, product_code, product_desc, price FROM products');
print '<table border="1">';
while($row = $results->fetch_object()) {
print '<tr>';
print '<td>'.$row->id.'</td>';
print '<td>'.$row->product_code.'</td>';
print '<td>'.$row->product_name.'</td>';
print '<td>'.$row->product_desc.'</td>';
print '<td>'.$row->price.'</td>';
print '</tr>';
}
print '</table>';
// close connection
$mysqli->close();
SELECT Single Value
Berikut adalah contoh script untuk mengambil single value.
//Open a new connection to the MySQL server
$mysqli = new mysqli('host','username','password','database_name');
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
//chained PHP functions
$product_name = $mysqli->query("SELECT product_name FROM products WHERE id = 1")->fetch_object()->product_name;
print $product_name; //output value
$mysqli->close();
SELECT Menggunakan Prepared Statements
Fitur penting lainnya dari Mysqli adalah Prepared Statements, fitur ini membolehkan kita untuk membuat hanya sekali query lalu query tersebut dapat di eksekusi berkali-kali dengan parameter berbeda. Prepared Statements secara signifikan meningkatkan kinerja terutama di table yang punya data besar dan request yang lebih kompleks. Query diurai secara terpisah oleh server, sehingga tahan terhadap kode injeksi berbahaya (SQL Injection).
Contoh script dibawah ini menggunakan Prepared Statements untuk kasus pencarian produk.
$search_product = "PD1001"; //product id
//create a prepared statement
$query = "SELECT id, product_code, product_desc, price FROM products WHERE product_code=?";
$statement = $mysqli->prepare($query);
//bind parameters for markers, where (s = string, i = integer, d = double, b = blob)
$statement->bind_param('s', $search_product);
//execute query
$statement->execute();
//bind result variables
$statement->bind_result($id, $product_code, $product_desc, $price);
print '<table border="1">';
//fetch records
while($statement->fetch()) {
print '<tr>';
print '<td>'.$id.'</td>';
print '<td>'.$product_code.'</td>';
print '<td>'.$product_desc.'</td>';
print '<td>'.$price.'</td>';
print '</tr>';
}
print '</table>';
//close connection
$statement->close();
Query yang sama dengan multiple parameter:
$search_ID = 1;
$search_product = "PD1001";
$query = "SELECT id, product_code, product_desc, price FROM products WHERE ID=? AND product_code=?";
$statement = $mysqli->prepare($query);
$statement->bind_param('is', $search_ID, $search_product);
$statement->execute();
$statement->bind_result($id, $product_code, $product_desc, $price);
print '<table border="1">';
while($statement->fetch()) {
print '<tr>';
print '<td>'.$id.'</td>';
print '<td>'.$product_code.'</td>';
print '<td>'.$product_desc.'</td>';
print '<td>'.$price.'</td>';
print '</tr>';
}
print '</table>';
//close connection
$statement->close();
INSERT Data
Contoh script untuk insert data:
//values to be inserted in database table
$product_code = '"'.$mysqli->real_escape_string('P1234').'"';
$product_name = '"'.$mysqli->real_escape_string('42 inch TV').'"';
$product_price = '"'.$mysqli->real_escape_string('600').'"';
//MySqli Insert Query
$insert_row = $mysqli->query("INSERT INTO products (product_code, product_name, price) VALUES($product_code, $product_name, $product_price)");
if($insert_row){
print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'
';
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
Contoh insert data menggunakan Prepared Statement:
//values to be inserted in database table
$product_code = 'P1234';
$product_name = '42 inch TV';
$product_price = '600';
$query = "INSERT INTO products (product_code, product_name, price) VALUES(?, ?, ?)";
$statement = $mysqli->prepare($query);
//bind parameters for markers, where (s = string, i = integer, d = double, b = blob)
$statement->bind_param('sss', $product_code, $product_name, $product_price);
if($statement->execute()){
print 'Success! ID of last inserted record is : ' .$statement->insert_id .'
';
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$statement->close();
INSERT Multiple Data
Contoh script untuk insert multiple data:
//product 1
$product_code1 = '"'.$mysqli->real_escape_string('P1').'"';
$product_name1 = '"'.$mysqli->real_escape_string('Google Nexus').'"';
$product_price1 = '"'.$mysqli->real_escape_string('149').'"';
//product 2
$product_code2 = '"'.$mysqli->real_escape_string('P2').'"';
$product_name2 = '"'.$mysqli->real_escape_string('Apple iPad 2').'"';
$product_price2 = '"'.$mysqli->real_escape_string('217').'"';
//product 3
$product_code3 = '"'.$mysqli->real_escape_string('P3').'"';
$product_name3 = '"'.$mysqli->real_escape_string('Samsung Galaxy Note').'"';
$product_price3 = '"'.$mysqli->real_escape_string('259').'"';
//Insert multiple rows
$insert = $mysqli->query("INSERT INTO products(product_code, product_name, price) VALUES
($product_code1, $product_name1, $product_price1),
($product_code2, $product_name2, $product_price2),
($product_code3, $product_name3, $product_price3)");
if($insert){
//return total inserted records using mysqli_affected_rows
print 'Success! Total ' .$mysqli->affected_rows .' rows added.
';
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
UPDATE Data
Contoh script untuk update data:
//MySqli Update Query
$update = $mysqli->query("UPDATE products SET product_name='52 inch TV', product_code='323343' WHERE ID=24");
if($update){
print 'Success! record updated';
}else{
print 'Error : ('. $mysqli->errno .') '. $mysqli->error;
}
Contoh script untuk update data menggunakan Prepared Statement:
$product_name = '52 inch TV';
$product_code = '9879798';
$find_id = 24;
$query = "UPDATE products SET product_name=?, product_code=? WHERE ID=?";
$statement = $mysqli->prepare($query);
//bind parameters for markers, where (s = string, i = integer, d = double, b = blob)
$statement->bind_param('ssi', $product_name, $product_code, $find_id);
if($statement->execute()){
print 'Success! record updated';
}else{
print 'Error : ('. $mysqli->errno .') '. $mysqli->error;
}
DELETE Data
Contoh script untuk delete data:
//MySqli Delete Query
//$delete = $mysqli->query("DELETE FROM products WHERE ID=24");
if($delete){
print 'Success! record deleted';
}else{
print 'Error : ('. $mysqli->errno .') '. $mysqli->error;
}