Simple MySQL Error catcher

Dalam membuat sebuah aplikasi, ada kalanya kita terpaksa melakukan query diluar model/controller. Karena manual, kemungkinan terjadi error sangatlah mungkin. Untuk beberapa kasus bahkan yang masih membuat model data secara manual juga dapat mengalami hal serupa.

Apabila Anda pengguna fungsi mysql, atau mysqli atau untuk DBMS yang lain oleh PHP memang sudah disediakan fungsi errornya. Yaitu kalau dalam mysql misalnya adalah “mysql_error()”.

Sebagai contoh Query:

$query = mysql_query("[Some Query here]")or die(mysql_error());

Apabila terjadi error, pesan error hanyalah akan menampilkan pesan errornya saja, tetapi tidak memberi tahu Query yang mana yang error sebenarnya.

Unknown column 'J' in 'field list'

Tentu kalau Querynya kita tahu dimana letaknya tidak begitu masalah. tetapi terdapat di dalam sebuah class yang merupakan turunan dari class yang di dalamnya ada banyak sekali query pasti membuat orang cukup merasa pusing mencari letak errornya.

Berikut ini mungkin adalah cara simple untuk mendapatkan error-nya, sekaligus memberitahu Query yang mana yang error.

Codingnya dapat dilihat sebagai berikut

           $theQuery = "SELECT JobID,J obName FROM job ORDER BY `JobName`";
           $query  = mysql_query($theQuery );
           $mess = mysql_error();
           
            if($mess!="")
            {
                echo "<p>Query Error the Msg,: <br /><strong>".$mess."<strong></p>";
                echo "<p>On Query:<br /><pre>$theQuery </pre></p>";
                die();
            }

Intinya, di dalam coding di atas ada 3 tahap. Pertama melakukan query, kemudian menampilkan pesan error melalui fungsi “mysql_error()“. Apabila Query berjalan mulus tanpa error, maka fungsi “mysql_error()” tidak akan mengembalikan value apapun, apabila terjadi error, baru variable “$mess” akan terisi pesan errornya. Kemudian tinggal diberi kondisi saja apabila ketemu errornya, kita print dengan Querynya supaya lebih jelas

Hasilnya:

Query Error the mess:
Unknown column 'J' in 'field list'

On Query:

SELECT JobID,J obName FROM job ORDER BY `JobName`

Tetapi kembali lagi, cara di atas hanya memberi tahu di query mana terjadinya error. Masalahnya apabila error tersebut terjadi di dalam Query dalam sebuah class yang sangat besar. Cukup susah melakukan tracingnya. Apabila kita menggunakan fasilitas extension x-debug yang disediakan PHP, error Query tidak akan muncul di tracingnya.

Lalu bagaimana membuat kita lebih bisa melakukan tracing error? Setelah mencari-cari bagaimana melakukan tracing berbekal dari pengalaman melihat beberapa framework PHP dan Abstraction Layer Class PHP, akhirnya gw menemukannya. Bahwa sebenarnya PHP memiliki sebuah function untuk melakukan bug tracing, yaitu debug_backtrace(). Penerapannya dalam coding dapat dilihat sebagai berikut:

$currentFile = debug_backtrace();
echo "<p>Trace :</p>";
echo "<table width=\"700\" align=\"center\"><tr><td><pre>";
print_r($currentFile);
echo "</pre></td></tr></table>";

Jadi mungkin kalau digabungkan dari contoh sebelumnya adalah sebagai berikut:

            $queryString = "SOME QUERY"
            $result = mysql_query($queryString );
            $mess = mysql_error();
           
           if($mess!="")
            {
                $currentFile = debug_backtrace();//__FILE__;
                echo "<p>Query Error the msg: <br /><strong>".$mess."<strong></p>";
                echo "<p>On Query:<br /><pre>$queryString </pre></p>";
                echo "<p>Trace :</p>";
                echo "<table width=\"700\" align=\"center\"><tr><td><pre>";
                print_r($currentFile);
                echo "</pre></td></tr></table>";
                die();
            }

Dengan demikian ketika terjadi error, akan muncul juga stack trace dari coding yang sedang dijalankan. Termasuk di dalamnya terlihat urutan object mana yang dipanggil, line berapa dari file apa, pathnya juga bisa didapatkan. Sisanya, untuk memudahkan penggunaan, coding di atas dapat dibungkus menjadi sebuah Class yang dapat digunakan berulang-ulang tanpa lagi susah menuliskan ulang semua perintah didalamnya. Semoga berguna :)

Popularity: 1% [?]

Tagged with:
 

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>