Catatan: Mengonversi dari mysql_
ke mysqli_
mungkin tidak optimal. Pertimbangkan PDO
jika Anda siap untuk mengonversi semua kode Anda menjadi OOP
.
Mungkin tergoda untuk mencoba mengganti semua instance mysql_
dengan mysqli_
dan doakan berhasil. Anda akan dekat tetapi tidak tepat sasaran.
Menghubungkan ke database:
Untungnya, mysqli_connect
bekerja cukup dekat untuk mysql_query
bahwa Anda bisa menukar nama fungsinya.
mysql_:
$con = mysql_connect($host, $username, $password);
mysqli_:
$con = mysqli_connect($host, $username, $password);
Memilih database
Sekarang, dengan sebagian besar fungsi lainnya di mysqli_
perpustakaan, Anda harus melewati mysqli_select_db
koneksi database sebagai pertama parameter. Sebagian besar mysqli_
fungsi membutuhkan objek koneksi terlebih dahulu.
Untuk fungsi ini, Anda bisa mengganti urutan argumen yang Anda berikan ke fungsi. Jika Anda tidak memberikan objek koneksi sebelumnya, Anda harus menambahkannya sebagai parameter pertama sekarang.
mysql_:
mysql_select_db($dbname, $con);
mysqli_:
mysqli_select_db($con, $dbname);
Sebagai bonus, Anda juga dapat meneruskan nama database sebagai parameter keempat ke mysqli_connect
- mengabaikan kebutuhan untuk memanggil mysqli_select_db
.
$con = mysqli_connect($host, $username, $password, $dbname);
Sanitasi masukan pengguna
Menggunakan mysqli_real_escape_string
sangat mirip dengan mysql_real_escape_string
. Anda hanya perlu melewatkan objek koneksi sebagai parameter pertama.
mysql_:
$value1 = mysql_real_escape_string($input_string);
mysqli_:
$value1 = mysqli_real_escape_string($con, $input_string);
Sangat Penting:Mempersiapkan dan Menjalankan Kueri
Salah satu alasan mysql_
fungsi yang ditinggalkan untuk memulai adalah ketidakmampuan mereka untuk menangani pernyataan yang disiapkan. Jika Anda cukup mengonversi kode Anda menjadi mysqli_
tanpa mengambil langkah penting ini, Anda akan menghadapi beberapa kelemahan terbesar mysql_
fungsi.
Ada baiknya membaca artikel ini tentang pernyataan yang disiapkan dan manfaatnya:
Wikipedia - Pernyataan yang Disiapkan
PHP.net - Pernyataan yang Disiapkan MySQLi
Catatan:Saat menggunakan pernyataan yang telah disiapkan, sebaiknya cantumkan secara eksplisit setiap kolom yang Anda coba kueri, daripada menggunakan *
notasi untuk menanyakan semua kolom. Dengan cara ini Anda dapat memastikan bahwa Anda telah memperhitungkan semua kolom dalam panggilan Anda ke mysqli_stmt_bind_result
.
mysql_:
$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
$col1 = $row['col1'];
$col2 = $row['col2'];
echo $col1 . ' ' . $col2 . '<br />';
}
mysqli_:
$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {
/* pass parameters to query */
mysqli_stmt_bind_param($stmt, "s", $value1);
/* run the query on the database */
mysqli_stmt_execute($stmt);
/* assign variable for each column to store results in */
mysqli_stmt_bind_result($stmt, $col1, $col2);
/* fetch values */
while (mysqli_stmt_fetch($stmt)) {
/*
on each fetch, the values for each column
in the results are automatically stored in
the variables we assigned using
"mysqli_stmt_bind_result"
*/
echo $col1 . ' ' . $col2 . '<br />';
}
/* close statement */
mysqli_stmt_close($stmt);
}
Menampilkan kesalahan
Menampilkan kesalahan bekerja sedikit berbeda dengan mysqli_
. mysqli_error
membutuhkan objek koneksi sebagai parameter pertamanya. Tapi bagaimana jika koneksi gagal? mysqli_
memperkenalkan sekumpulan kecil fungsi yang tidak memerlukan objek koneksi:mysqli_connect_*
fungsi.
mysql_:
if (!$con) {
die('Could not connect: ' . mysql_error());
}
if (!$result) {
die('SQL Error: ' . mysql_error());
}
mysqli_:
/* check connection error*/
if (mysqli_connect_errno()) {
die( 'Could not connect: ' . mysqli_connect_error() );
}
/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {
// ... execute query
if (mysqli_stmt_error($stmt)) {
echo 'SQL Error: ' . mysqli_stmt_error($stmt);
}
}