2012-05-31

hindari membuat query semacam ini


sejujurnya saya cukup lelah kalo harus benerin logic orang .. terutama kalau udah masuk namanya query. sebenarnya saya bukan bahas query (select bla bla bla).. tetapi bagaimana logic dia dalam memakai query tersebut. Perlu diketahui kebanyakan orang memakai cara langsung ketik query didalam parameter fungsinya yaitu mysql_query.. kebetulan yang dipake mysql dan umumnya kalau PHP pasti databasenya Mysql. Tidak menutup kemungkinan engine lain, tetapi Mysql selalu jadi pilihan!!

dalam tulisan ini, saya menganggap bahwa sudah terjadi koneksi data dan juga memilih database. Juga saya asumsikan bahwa yang dipake adalah mysql_query() bukan mysql_db_query() walaupun saya suka menggunakan yang no 2 karena bisa dipake kalau databasenya lebih dari 1!!

Sebenarnya dalam melakukan query di php, ada 1 fungsi lagi yang sepatutnya di masukkan.. yaitu perintah mysql_error()
kenapa mysql_error() penting!! karena mysql_error bertujuan untuk menemukan kesalahan logic kamu.. untuk mempersingkat. GW kurang setuju kalau pake logic seperti ini
$res=mysql_query("query yang sangat panjang sekali sampai gw males lanjutin");
gw lebih suka pake logic seperti ini

$sql="query sangat panjang ampe gw mules";
$res=mysql_query($sql) or die(mysql_error()."<br>".$sql);

mode pertama sangat efektif.. tapi akan rugi saat kamu mendapati hal ini
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in xxx
atau
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in xxx
apa yang bikin salah!! dimana yang bikin salah.. anggap aja query kamu sepanjang ini
select doc_id
            from
            klinik_daftar d,
            klinik_daftarpasien dp,
            klinik_doctor dr,
            klinik_docspecialis dsp
            where
            d.daf_id = dp.dafpat_dafid and
            dp.dafpat_docid =dr.doc_id and
            dr.doc_specId=dsp.spec_id and
            dp.dafpat_type=1 
            $date1
            and dsp.spec_id=".$obj[0]->spec_id."                
            order by d.daf_id limit 0,1
sayangnya ini pendek jadi kamu pasti menemukan salahnya dengan mudah,, kalau sepanjang ini
select  *,u1.username operator, u2.username daftar
    from
    jos_users u1,jos_users u2,
    klinik_daftar d,
    klinik_daftarpasien dp,
    klinik_doctor dr,
    klinik_docspecialis dsp,
    `klinik_daftarpasienpay` dpp
    where
    d.daf_id = dp.dafpat_dafid and
    dpp_daf=daf_id and
    dp.dafpat_docid =dr.doc_id and
    dr.doc_specId=dsp.spec_id and
    dp.dafpat_type=1 and
    dr.doc_id=".$doc[$i]->doc_id." and
    dafpat_appBy=u1.id and
    daf_userInp=u2.id and
    $pay
    $date1
    dsp.spec_id=".$obj[0]->spec_id."    
    order by  dp.dafpat_date asc
    limit $page,$max
trus mendadak kamu mendapatkan error.. dimana kamu akan perbaiki!!
memanfaatkan logic yang agak panjang punyaku
$sql="query sangat panjang ampe gw mules";
$res=mysql_query($sql) or die(mysql_error()."<br>".$sql);
 kamu akan dapat menemukan query yang salah plus querynya di tulis setelah error!!

Logic yang ku angkat disini memang boros.. tetapi mudah bagi anda menemukan kesalahan.. jangan merasa menulis querynya di dalam fungsi akan mempermudah anda.. karena justru akan merugikan.. dan kalau rugi.. siapa yang akan rugi duluan.. tentu anda.. belum lagi urusan-urusn lain menanti anda..


Tidak ada komentar: