2013-05-24

jangan pake mysql_error()

semoga ada yang belikan
mengcounter tulisan gw yaitu tentang penggunaan mysql_die dan meletakkan query di variable lalu dijalankan. Sejujurnya saya tidak maslah dengan penulisan sql, karena itu masalah kebiasaan anda saja. Kebiasaan tidak bisa dipaksakan.. Tapi sekarang kita membahas 'JANGAN PAKAI MYSQL_error'.. mari bahas 1-1 alasannya

SAY NO TO MYSQL FUNCTION.. WELCOME MYSQLI

Sebelumnya mau info kalau mysql tidak memiliki fungsi sebanyak mysqli, kedepannya kita pasti akan memanfaatkan mysqli!! bahkan kl mau dibilang akan ada waktu kita akan belajar namanya innodb/transaksi table di mysql. Walaupun akan lebih baik pake database non-mysql buat transaksi, tetapi kita membahas sesuatu yg pemula dahulu.
Karena pemula biasanya pake mysql, maka pembahasannya adalah mysql dahulu atau sekalian aja pake mysqli. di mysqli kita biasa memakai mysqli_error(). Namun simpan pemakaian mysqli_error ini dahulu kita lanjut kepada alasan kedua.

KERAPIAN SCRIPT

apa yang terjadi kalau script yang anda buat dan sudah online muncul error seperti ini
error on bla bla ...
alasan yg inilah yang mendasari kita untuk tidak pake mysql_die(). Tetapi bagaimana cara agar mengetahui error tetapi juga tidak merugikan kamu. Mari asumsikan kalau kamu pemula dalam php dan memakai di lokal, kamu bisa langsung pake metode mysql_die yang kutulis di artikel lain. . gw menulisnya
$sql="query disini";
$res=mysql_query($sql)or die(mysql_error());

PENULISAN QUERY YANG RAPI

Untuk menulis query anda bisa menulis langsung
select * from dataku where bla=1 
tapi kedepannya kita akan menghadapi penulisan query yang panjang seperti berikut
SELECT dd_diag, COUNT( dd_diag ) c, d.d_index str FROM  `klinik_daftardiagnosa` , klinik_daftar, klinik_diagnosa d WHERE  `dd_daf` = daf_id AND daf_timeArrive =  '$date1' AND daf_timeArrive =  '$date2' AND dd_diag = d_id GROUP BY dd_diag ORDER BY  `c` DESC  limit 15
tentu kita akan pusing membacanya.. dan kalau ada error akan sulit mencarinya.. itulah sebabnya saya punya kebiasaan (kalau mau disebut buruk) menulis sebagai berikut

SELECT 
dd_diag, COUNT( dd_diag ) c, d.d_index str
FROM  `klinik_daftardiagnosa` , klinik_daftar, klinik_diagnosa d
WHERE  `dd_daf` = daf_id
AND daf_timeArrive >=  '$date1'
AND daf_timeArrive <=  '$date2'
AND dd_diag = d_id
GROUP BY dd_diag
ORDER BY  `c` DESC 
limit 15


apa bedanya?? bedanya saya memecah-mecah.. linenya jadi banyak tetapi bila ada kesalahan anda sudah bisa mencari posisi salahnya.

KENDALIKAN ERROR

seperti yang kita ketahui, mengendalikan error melalui mysql_die(). Namun bila ini sudah ada di web sebenarnya bisa berabe khan!! itu gw mengajarkan tehnik yaitu mendeteksi dimana web ini dijalankan. Bila di local, silakan aja ada error dan stop (die(mysql_error()). Tapi tidak di web sebenarnya!!

Yang perlu kita butuhkan saat ini adalah pengendali error dan juga tampilan yang tepat agar kita tak salah.. Itu sebabnya saya kembangkan pembahasan membuat fungsi error sendiri.

FUNGSI ERROR

karena semua fungsi memakai konsep

  • mysql_query
  • check apakah ok..


maka kita akan membuat semacam fungsi yang berisi mysql_query dan mysql_error. Namun karena disini saya mau mengangkat mysqli.. Mari bikin based on mysqli.. Saya memilih mysqli prosedural (bukan fungsi)

Pertama pastikan koneksi ok
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 
 /* check connection */
 if (mysqli_connect_errno()) { 
 printf("Connect failed: %s\n", mysqli_connect_error()); exit(); 
}
berikutnya kita membuat sql seperti tulisan di atas (yang bertingkat-tingkat) untuk kerapian saja.
$sql="bla bla";

berikutnya bikin fungsi dan beri nama query(). perhatikan bahwa ini masih dalam localhost jadi lebih pendek
function query($sql)
{
 global $link;
$res=@mysqli_query($sql);
if(!$res){
  die(mysqli_error($link)."
$sql:
$sql ");

}else{
   return $res;
}

}/*function */

untuk menggunakan pakailah $link=query($sql); bila ngak ada masalah silakan lanjut, tapi bila ada masalah akan muncul error dan program berhenti.

UNTUK DI WEB YANG BERJALAN

kita wajib merubah isi dari fungsi tersebut..
function query($sql)
{
 global $link;
$res=@mysqli_query($sql);
if(!$res)
{
if($_SERVER['REMOTE_ADDR']=='127.0.0.1')
{
 die(mysqli_error($link)."
$sql:
$sql ");
}else{
$file = 'error.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= mysqli_error($link)."\nsql=$sql\n";
// Write the contents back to the file
file_put_contents($file, $current);


}

return FALSE;
}
else
{
  return $res;
}

}/*function */
inilah hasil dari fungsi tersebut. Bila matamu sakit membacanya.. lihat di sini aja

inti dari fungsi ini adalah
  • check bila sql benar
  • bila salah liat apakah yang akses localhost ato bukan
  • bila localhost lakukan perintah normal yaitu DIE
  • bila bukan kirim ke file error
Dengan adanya tambahan ini, kamu harus membuat sebuah kondisi bila data yang terkirim salah maka akan keluar error / peringatan kepada user!! atau terserah apa kondisi yang menurut anda layak. Mungkin saat ini belum terlihat perlu, namun ada baiknya persiapkan secara dini
Semoga fungsi ini mampu jadi perhatian anda kedepannya. 

KESIMPULAN

  • persiapkan error control!
  • kerapian sql perlu karena kita bisa saja di masa depan menulis query nan panjang
  • liat dimana kita menulis query, bila di local maka lakukan die! bila tidak lakukan pencatatan
  • selalu persiapkan kondisi jika kita mendapatkan query yang salah (setelah proses fungsi query).

Tidak ada komentar: