Pesan kesalahan Fatal error Call to a member function execute on a non-object

Pertanyaan

Saya menjumpai kesalahan seperti ini saat menjalankan skrip PHP saya:

Fatal error: Call to a member function execute() on a non-object in ... on line N

Kenapa dan bagaimana menyelesaikannya?

Jawaban/solusi

Pesan ini terjadi karena prepare() di baris sebelum baris N gagal, tapi Anda tidak mengecek status keberhasilannya. Sehingga saat dicoba execute() gagal dan muncul pesan kesalahan di atas. Contoh:

$sth = $dbh->prepare("SELECT encpass FROM user WHERE username='$user' AND isdisabled=0"); 
$sth->execute();

Jika di baris pertama prepare() berhasil, maka tidak masalah, baris kedua pun akan berhasil. Tapi jika baris pertama gagal, maka $sth akan bernilai false, dan saat dicoba melainkan $sth->execute() maka akan muncul pesan kesalahan bahwa kita memanggil metode execute pada sesuatu yang bukan objek (yaitu, false).

Baris prepare() dapat gagal karena query SQL-nya salah (syntax error) atau bisa juga terjadi perubahan di database, misalnya tabel user dihapus atau direname, dsb, sehingga bisa saja sebuah skrip yang tadinya jalan dengan baik tiba-tiba suatu hari macet dengan pesan kesalahan di atas.

Untuk menampilkan pesan kesalahan yang lebih ramah/tepat, ada baiknya Anda selalu mengecek $sth. Contoh:

$sth = $dbh->prepare("SELECT encpass FROM user WHERE username='$user' AND isdisabled=0") or die("Gagal mengecek user di database"); 
$sth->execute();

Resita has written 705 articles