PHP Error : Doesn’t have a default values



Dari pesan error yang ditampilkan sebenarnya kita sudah mengerti apa yang dimaksudkan oleh si PHP atau Database MySQL, yaitu ada nilai yang terdapat pada kolom yang tidak memiliki nilai default, atau error biasanya akan di ikuti dengan memberi tahu nilai kolom yang tidak memiliki atau tidak didefinisikan nilai defaultnya.

Sebelum ke arah sana, saya ingin menceritakan terlebih dahulu sebuah kasus terlebih dahulu. Jadi saya memiliki beberapa tabel, dan tabel – tabel tersebut di eksekusi dalam waktu yang bersamaan pada saat user membuat sebuah akun

Contoh fungsi INSERT dengan Prepared Statement dan INSERT Biasa yang saya buat :


  function BuatAkunInsertIdOrtu(){
		$sql="INSERT INTO ppdb_ortu (id) VALUES('')";
		$perintah=query($sql);
		return $perintah;
	}
	function BuatAkunInsertIdDokumen(){
		$sql="INSERT INTO ppdb_dokumen (id) VALUES('')";
		$perintah=query($sql);
		return $perintah;
	}
	function BuatAkunInsertIdRaport(){
		$sql="INSERT INTO ppdb_raport (id) VALUES('')";
		$perintah=query($sql);
		return $perintah;
	}
	function BuatAkunInsertIdUn(){
		$sql="INSERT INTO ppdb_un (id) VALUES('')";
		$perintah=query($sql);
		return $perintah;
	}
	function BuatAkunInsertIdAsalSekolah(){
		$sql="INSERT INTO ppdb_asalsekolah (id) VALUES('')";
		$perintah=query($sql);
		return $perintah;
	}
	function BuatAkunInsertIdMhs($nama, $kode_daftar, $tgl_pendaftaran){
		$sql="INSERT INTO ppdb_siswa (nama, kode_daftar, tgl_pendaftaran) VALUES(?,?,?)";
		if($stmt=prepare($sql)):
			$stmt->bind_param("sss",$param_nama, $param_kode, $param_tgl);		
			$param_nama=$nama;		
			$param_kode=$kode_daftar;
			$param_tgl=$tgl_pendaftaran;
			if($stmt->execute()):
				return true;
			else:
				return false;
			endif;
		endif;
		$stmt->close();
	}
	function BuatAkunInsertIdPembayaran($nama, $kode_refrensi, $virtual_account){
		$sql="INSERT INTO ppdb_pembayaran (nama, kode_refrensi, virtual_account) VALUES (?,?,?)";
		if($stmt=prepare($sql)):
			$stmt->bind_param("sss",$param_nama, $param_kode, $param_virtual);
			$param_nama=$nama;
			$param_kode=$kode_refrensi;
			$param_virtual=$virtual_account;
			if($stmt->execute()):
				return true;
			else:
				return false;
			endif;
		endif;
		$stmt->close();
	}
  

Fungsi tersebut selanjutnya di eksekusi dalam satu perintah untuk insert ke banyak tabel secara bersamaan, maka saya tulis jadi seperti berikut :


    if(BuatAkun($nama, $email, $username, $password)  && BuatAkunInsertIdMhs($nama, $kode_daftar, $tgl_pendaftaran) && BuatAkunInsertIdOrtu()  && BuatAkunInsertIdDokumen() && BuatAkunInsertIdAsalSekolah() && BuatAkunInsertIdRaport() && BuatAkunInsertIdUn() && BuatAkunInsertIdPembayaran($nama, $kode_daftar, $virtual_account)):
    


Pada beberapa server hosting dengan PHP versi 7 dengan database MariaDB, fungsi ini sebenarnya berjalan dengan normal, tanpa harus kita definisikan nilai default, tapi jika server database MySQL versi 5.7.29 kebawah, insert multiple tabel ini selalu mengembalikan nilai false

Test pada server lokal windows dengan dengan PHP 7 dan Database MariaDB normal tanpa harus di definisikan nilai defaultnya. Namun pada server localhost ubuntu 20 dengan versi php 7 dan MariDB 10, fungsi script diatas akan menampilkan nilai false, tidak menampilkan pesan DOESN’T HAVE DEFAULT VALUES sehingga kita tidak tahu bagian mana yang sebenarnya bermasalah, akhirnya saya ganti semua fungsi INSERT data biasa dengan Prepared Statement, dan error doesn’t have default values tampil.

Menurut Saya pointnya disini adalah di server tertentu ada yang perlu di definisikan ada yang tidak perlu di definisikan nilai defaultnya, tapi mungkin memang idealnya didefinisikan.

Solusi  Doesn’t have a default values :
Anda hanya perlu mendefinisikan nilai default pada setiap kolom yang memang tidak didefinisikan nilainya pada saat proses INSERT dengan nilai default NULL.

If you have error ‘doesn’t have a default values’, you must define default value in every field colum with NULL, if columns not defined insert



0 Response to "PHP Error : Doesn’t have a default values"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin