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();