[Yii Framework] Penanganan Error pada SQL Error

Yii Framework secara otomatis telah membuat errorHandler secara otomatis pada suatu aplikasi. Jadi jika terjadi error pada suatu action, maka aplikasi akan secara otomatis melempar aksi tersebut ke halaman error. Tapi ada beberapa error yang tidak diperlakukan demikian dimana aplikasi biasanya akan menampilkan semua kesalahan error yang ada pada penggguna..

Untuk kesalahan error pada SQL error, sangat tidak baik jika pengguna biasa dapat melihat error yang dihasilkan dari SQL error tersebut. Kenapa ?? karena pada SQL error akan menampilkan pesan error dari suatu QUERY SQL yang gagal di eksekusi. Dan apa dampaknya?? Yah, jika pengguna melihat QUERY SQL yang gagal di eksekusi, itu artinya pengguna bisa tahu QUERY yang sedang dijalankan dibalik aplikasi. Dan itu adalah umpan yang sangat ampuh untuk memancing orang mengusili aplikasi anda..

Berikut salah satu cara untuk menangani SQL Error agar saat terjadi Error aplikasi tidak menampilkan error tersebut, melainkan melemparkan pengguna pada suatu action yang memberitahukan bahwa terjadi kesalahan pada aplikasi.

Berikut controller yang harus anda buat :

	public function actionCreate()
	{
		$model=new Satu;	
		if(isset($_POST['Satu']))
		{
			try{
			$model->attributes=$_POST['Satu'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->satusatu));
			}
			catch(CDbException $e)
			{
				$this->redirect(array('salah'));
			}
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

Penjelasan : Saya mencontohkan pada contoh kasus INSERT DATA BARU. Disini adalah kunci utama dari code kita dimana aksi akan melakukan pengecekan terlebih dahulu, jika data berhasil disimpan maka data akan disimpan dan pengguna akan melihat aplikasi seperti biasa nya. Tapi jika data gagal disimpan, misal: Primary Key nya terjadi duplikasi, maka pengguna akan dilemparkan ke action “salah”. Itu terjadi karena adanya fungsi untuk menangkap error pada SQL pada code “catch(CDbException $e)”. Nah, sekarang kita perlu membuat action “salah” yang isinya adalah pemberitahuan kepada pengguna bahwa ada kesalahan pada aplikasi.

Pada controller tersebut, buatlah sebuah action baru dengan nama actionSalah, dan kode nya seperti berikut:

public function actionSalah()
	{
		$this->render('salah');
	}

Lalu jangan lupa masukkan pada accessRule agar dapat diakses:

public function accessRules()
	{
		return array(
			array('allow',
				'actions'=>array('index','view','salah'),
				'users'=>array('*'),

Setelah itu pada views nya, buat sebuah file bernama “salah.php” yang isinya sebagai berikut :

<?php
$this->breadcrumbs=array(
	'Satus'=>array('index'),
	'Salah'
);

$this->menu=array(
	array('label'=>'List Satu', 'url'=>array('index')),
	array('label'=>'Create Satu', 'url'=>array('create')),
	array('label'=>'Manage Satu', 'url'=>array('admin')),
);
?>

SQL ANDA SALAH

 

Anda dapat mengetikkan pesan kesalahan apa saja sesuai dengan kebutuhan anda. Dan tentu anda juga bisa menampilkan pesan error tersebut dengan cara anda sendiri..

Selesai… Selaman mencoba..

Semoga membantu…😀

 

4 Responses to [Yii Framework] Penanganan Error pada SQL Error

  1. andri says:

    gan saya udah coba kok masih eror ya?
    ini error nya :
    CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ’02’ for key ‘PRIMARY’. The SQL statement executed was: UPDATE `tblkecamatan` SET `id_kecamatan`=:yp0, `nama_kecamatan`=:yp1 WHERE `tblkecamatan`.`id_kecamatan`=’01’

    (tolong kasih pencerahan gan)

  2. agan input id yang uda ada di databse sebelumnya.

    • ardi says:

      Saya juga ngalamin kayak diatas kak..
      Data di db udah kosong ttap ditandai duplikat…
      Id yg pernah dimasukkan lalu dihapus setelah itu data dimasukkan lagi dgn id yg sama.. Lalu muncul CDbCommand kyak diatas..
      Gmana solusinya kak..?

  3. ian says:

    Mantaaaaps… Sangat membantu sekali

    Thanks gan🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: