Penggunaan fungsi PSQL pada PHP

Tutorial Membuat Koneksi Dengan PHP Dan PostgreeSQL – PostgreeSQL merupakan salah satu basis data yang banyak digunakan saat ini dan bersifat opensource. Pada tutorial ini anda akan belajar bagaimana caranya membuat koneksi ke database Postgree dengan menggunakan bahasa pemograman PHP. karna tidak seperti MySQL yang secara default sudah bisa digunakan. untuk Postgree ada beberapa langkah yang harus anda lakukan terlebih dahulu yang akan kita bahas sekarang.

Table of Contents

  • Pertama : Mengaktifkan Extension pdo_pgsql
  • Cara Membuat Koneksi PHP Dan PosgreeSQL
  • Video Tutorial Membuat Koneksi PHP Dan PostgreeSQL
  • Baca Artikel Terkain Menarik Lain:
  • Apa kegunaan PostgreSQL?
  • Kenapa harus PostgreSQL?
  • Bahasa apa saja yang bisa digunakan untuk membuat fungsi pada PostgreSQL?
  • Apa perbedaan MySQL dan PostgreSQL?
  • Apa kegunaan PostgreSQL?
  • Kenapa harus PostgreSQL?
  • Apakah Postgre gratis?

Table of Contents

  • Pertama : Mengaktifkan Extension pdo_pgsql
  • Cara Membuat Koneksi PHP Dan PosgreeSQL
  • Video Tutorial Membuat Koneksi PHP Dan PostgreeSQL
  • Baca Artikel Terkain Menarik Lain:
  • Apa kegunaan PostgreSQL?
  • Kenapa harus PostgreSQL?
  • Bahasa apa saja yang bisa digunakan untuk membuat fungsi pada PostgreSQL?
  • Apa perbedaan MySQL dan PostgreSQL?

Pertama : Mengaktifkan Extension pdo_pgsql

Agar aplikasi yang anda buat bisa terkoneksi dengan database PostgreSQL terlebih dahulu anda harus mengaktifkan extension pdo_pgsql yang secara default tidak aktif. Cara untuk mengaktifkan extensi pdo_pgsql sangat mudah, silahkan buka xampp control panel dan buka konfigurasi file php.ini dengan cara seperti ini :

Penggunaan fungsi PSQL pada PHP

atau jika anda tidak menggunakan xampp maka silahkan cari file php.ini secara manual, jika sudah ketemu maka langkah selanjutnya adalah mencari script yang digunakan untuk mengaktifkan extension pdo_pgsql seperti dibawah ini :

;extension=pdo_pgsql

Lalu kemudian silahkan hapus semicolon nya agar extension tersebut aktif sehingga menjadi seperti dibawah ini  :

extension=pdo_pgsql

Kemudian silahkan restart apache dari web server anda untuk mendapatkan perubahan.

Cara Membuat Koneksi PHP Dan PosgreeSQL

Selanjutnya kita akan membuat script untuk koneksi PHP dan Postgree, tapi sebelum membuat script koneksinya silahkan buat dulu database nya, dalam tutorial ini saya sudah mempersiapkan sebuah database baru dengan nama penggajian.

Kemudian langkah selanjutnya baru membuat script koneksinya, silahkan buat sebuah file baru dengan nama koneksi_potsgree.php pada folder htdocs dan tulis script berikut ini :

Jika sudah silahkan melakukan save untuk menyimpan perubahan, langkah selanjutnya adalah melakukan testing dengan menggunakan browser, silahkan akses localhost/koneksi_postgree.php dan jika konfgurasi yang anda buat sudah benar maka seharusnya muncul seperti ini :

Video Tutorial Membuat Koneksi PHP Dan PostgreeSQL

Jika anda masih kesulitan dalam mengikuti artikel ini, seya sediakan juga langkah langkah bagaimana mengaktifkan extension pdo_pgsql dalam format video agar anda bisa membuat koneksi dengan PHP Dan PostgreeSQL.

sekian materi ini, semoga menjadi solusi bagi anda yang sedang mengalami masalah membuat koneksi antara aplikasi PHP dan database PostgreeSQL.

Nuris Akbar SST, M.Kom

Senior Backend Web Developer Dengan Pengalaman Lebih Dari 8 Tahun, Sekarang Menjadi CTO Di Startup Globalvillage, Founder Academy Diigtal Dan Instruktur Training Di PT Brainamtics Cipta Informatika.

Baca Artikel Terkain Menarik Lain:

1

2 Dasar-dasar Pemrograman PHP dan Database PostgreSQL irsan riza Published: Januari 2013

3 Daftar Isi Daftar Isi... 3 PHP... 1 Cara Mudah Belajar PHP... 2 Apa itu PHP?... 2 PHP dan Webserver... 3 Membuat PHP... 3 Istilah penting... 4 Hello World!... 4 Melihat Hasil Program... 5 Struktur PHP... 5 Variabel dan tipe data... 6 Menampilkan Teks... 8 Array... 9 Fungsi pada PHP Perintah Kondisional Looping/Pengulangan Konsep Object Oriented Programming Database PostgreSQL Instalasi PostgreSQL Membuat database baru Tipe Data Normalisasi Database Relasi Antar Tabel Membuat Tabel Membuat Backup Database Merestore Database Koneksi database melalui PHP Daftar Pustaka... 43

4 PHP 03 Januari :06 Apa kepanjangan PHP? Awalnya diketahui PHP adalah "Personal Home Page", namun semenjak dikenalkannya PHP versi 3, kepanjangannya diganti menjadi rekursif (pengulangan) yaitu "PHP: Hypertext Preprocessor". Baiklah sepertinya tidak penting hanya membahas singkatannya, sekarang mari kita mulai dengan materi yang lebih menantang. PHP merupakan bahasa pemrograman web yang bekerja di sisi server (server side scripting). Berbeda dengan html, css, dan javascript yang bekerja di sisi client, pendekatan pemrograman dengan cara ini memiliki keuntungan tersendiri yaitu syntax yang kita buat tidak akan terbuka pada sisi client yang berarti mengurangi celah keamanan pada website yang kita bangun. Selain PHP memang terdapat banyak sekali pilihan bahasa pemrograman web untuk server side scripting seperti asp, java server page (jsp), coldfusion, dan lain sebagainya. Bahkan dahulu kala sebelum menggunakan php, BPS sediri pernah mengalami era coldfusion, namun semuanya berubah semenjak negara api menyerang. Bukan, sebenarnya alasan memilih PHP untuk website yang akan kita bangun adalah karena PHP mmerupakan bahasa yang paling banyak digunakan di seluruh dunia dan mendukung pemrograman yang jauh lebih powerful dan kompleks. Struktur bahasanyapun lebih mudah untuk dipahami karena mengadopsi struktur pemrograman C, perl, dan java. Saat ini PHP sudah mencapai versi 5 yang mendukung penuh gaya pemrograman terbaru yang sedang trend yaitu "object oriented programming" (OOP). Adapun turunan dari penggunaan gaya OOP ini bisa bermacam-macam, contohnya adalah konsep MVC (Model View Controller) yang diusung pada framework Yii. Lebih lanjut mengenai Yii ini akan dibahas pada kesempatan lain. Pada pemrograman PHP kita membutuhkan PHP interpreter yang biasanya melekat pada web server. Program yang kita buat dalam bahasa PHP dapat kita sisipkan diantara syntax HTML dengan menggunanan tag dan diakhiri dengan tag. File ini nantinya harus disimpan dengan ekstensi *.php dan diletakkan pada folder yang bisa diakses oleh web server, asumsinya kita menggunakan web server apache pada platform windows, maka lokasi foldernya adalah "C:/xampp/htdocs/". 1

5 Cara Mudah Belajar PHP 06 Desember :46 Apa itu PHP? Dan apa hubungannya dengan web site(s)? Bagaimana PHP bekerja? Bagaimana cara membuatnya? Software apa yang harus diinstall untuk membuat dan menjalankan PHP? Apa itu PHP? 06 Desember :47 PHP = PHP Hypertext Processing = Personal Home Page PHP bahasa pemrograman yang dikhususkan untuk membuat halaman web Bedanya dengan html? Sedangkan PHP adalah file yang akan dieksekusi/dibaca terlebih dahulu oleh PHP interpreter pada web server baru kemudian ditampilkan oleh web browser html adalah file yang dikenali dan akan dibuka oleh web browser (seperti mozilla, internet explorer atau opera) 2

6 PHP dan Webserver 06 Desember :53 PHP interpreter Adalah penterjemah bahasa PHP menjadi bahasa yang dimengerti oleh mesin komputer yang akan mengeksekusi perintah yang kita buat Web Server Adalah mesin server atau komputer biasa yang diinstall dengan software khusus (misal: apache,iis,server2go,vertrigo,dll) untuk menempatkan halaman web yang kita buat agar dapat diakses secara mudah dari komputer lain (yang terhubung dengan jaringan komputer server) Cara Kerja PHP: User (seperti kita) yang menggunakan web broser untuk me-request (meminta untuk membuka) halaman web Web server mencari file yang diminta Bila file mengandung perintah PHP, PHP interpreter akan menterjemahkannya sebelum dieksekusi Hasil eksekusi akan dikirim ke web browser dan siap dibaca oleh user Membuat PHP 06 Desember :57 Belajar bahasa PHP yang umum Sama seperi saat membuat program dengan bahasa lain (VB, java, C#, pascal, dll) tergantung text editor (program pembuat file text) yang kita gunakan Tools yang diperlukan: Web server (misal: apache) PHP interpreter (catatan: untuk memudahkan, biasanya apache&php telah dibundle dalam 1 installer apache2triad ) PHP editor (optional, tergantung kebutuhan. Misal: dreamweaver, PHP editor, notepad++, atau bahkan NOTEPAD ) 3

7 File yang mengandung perintah PHP (yang kita buat) harus disimpan dalam ekstensi *.php diletakkan di folder yang bisa diakses webserver misalnya C:\xampp\htdocs\ gunakan tag PHP ( )di awal dan di akhir perintah PHP Jangan lupa menggunakan ; pada setiap akhir statement Istilah penting 06 Desember :02 Echo digunakan untuk menampilkan string ke web browser: ==,>,<,>=,<=,!= perbandingan dua nilai menghasilkan true/false & and or = memberi nilai variabel kiri dengan nilai pada variabel kanan { sebagai begin dan end untuk statement yang berkelompok (if then, while) Hello World! 06 Desember :05 Buka notepad atau text editor sederhana lainnya Ketikkan kode sebagai berikut: program pertamaku</titke> </head> <body> echo hello world ; </body> </html> 4</p><p><span>8</span> Penjelasan Program: <html> <head> Bahasa HTML <title>program pertamaku</titke> </head> <body> Tag Buka PHP Perintah PHP Tag Tutup PHP Bahasa HTML echo hello world ; </body> </html> Melihat Hasil Program 06 Desember :12 Simpan file berisikan kode PHP tadi ke C:\xampp\htdocs\hello.php Buka web browser (mozilla firefox) Ketikkan alamat Viola..! Anda berhasil membuat program hello world Struktur PHP 03 Januari :36 Seperti yang kita ketahui sebelumnya bahwa untuk menuliskan perintah php kita harus menggunakan awalan tag dan diakhiri dengan tag. File-file yang kita buat yang mengandung unsur perintah dalam bahasa PHP harus kita simpan dengan ekstensi "*.php" dan diletakkan di folder yang bisa diakses oleh web server. Diasumsikan bahwa kita menggunakan xampp sebagai web server lokal, maka lokasi penyimpanan file php secara default seharusnya berada di "C:/xampp/htdocs/". Kita bisa membuat sub folder dibawahnya untuk mempermudah manajemen penyimpanan file. Dalam penulisan perintah php, setiap satu statement dalam php diakhiri dengan tanda titik koma ";". Untuk mengelompokkan beberapa statement misalnya untuk penggunaan if, for, ataupun fungsi 5</p><p><span>9</span> maka digunakan tanda bracket { dan. Untuk mendefinisikan variabel kita menggunakan tanda $ pada awal nama variabel untuk membedakannya dengan nama fungsi, prosedur, atau objek. Contoh: Echo "hai.."; $a = 1; If ($a== 1) { Echo "nilai dari variabel a adalah = ", $a; Echo "<br>"; Untuk keperluan dokumentasi program, PHP juga memiliki kode untuk menambahkan baris komentar yaitu tanda "//" utuk menandakan 1 baris komentar. Sedangkan untuk beberapa baris komentar digunakan tanda /* untuk memulai komentar, dan tanda */ untuk mengakhiri komentar. // ini baris komentar /* ini untuk beberapa baris komentar Komentar baris kedua*/ Variabel dan tipe data 03 Januari :36 Pada PHP kita tidak perlu mendefinisikan variabel secara eksplisit, karena variabel tersebut akan didefinisikan secara langsung saat kita memberikan nilai pertama kali. Dan tipe data dari variabel itupun akan secara otomatis diberikan sesuai dengan nilai yang kita masukkan. Misalnya kita memasukkan nilai "1" (dengan tanda petik) maka tipe data variabel akan menjadi string. Dan bila kita memasukkan nilai 1, maka tipe datanya akan menjadi numerik. Untuk mendukung konsep pemrograman berorientasi objek PHP memiliki empat macam variabel yang dapat digunakan sesuai kebutuhan. Keempat jenis variabel itu adalah variabel lokal, global, static, dan parameter. Variabel lokal adalah variabel yang didefinisikan di dalam sebuah fungsi dan hanya berlaku di dalam fungsi tersebut. Variabel ini biasanya akan dihapus setelah fungsi selesai dijalankan, dan nilainya tidak dapat diakses dari luar fungsi, begitu pula sebaliknya. $a = 5; // global scope function mytest() { echo $a; // local scope mytest(); 6</p><p><span>10</span> Contoh diatas tidak akan menghasilkan output apa-apa, karena variabel $a didefinisikan diluar fungsi, dan di dalam fungsi variabel $a tersebut tidak pernah didefinisikan sehingga tidak dapat diproses lebih lanjut dengan perintah "echo". Variabel global adalah variabel yang didefinisikan diluar suatu fungsi dan dapat digunakan di bagian manapun dari program kecuali didalam sebuah fungsi. Untuk dapat menggunakan variabel ini di dalam fungsi tertentu, maka variabel ini harus didefinisikan ulang sebagai variabel global di dalam fungsi tersebut. Dengan cara sebagai berikut: $a = 5; $b = 10; function mytest() { global $a, $b; $b = $a + $b; mytest(); echo $b; Cara lain memanggil variabel global dalam lingkup fungsi adalah dengan menggunakan variabel $GLOBALS['nama_variabel'] sebagai berikut: $a = 5; $b = 10; function mytest() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; mytest(); echo $b; Kedua cara itu akan menghasikan output yang sama yaitu "15". Variabel static adalah variabel yang ada di dalam suatu fungsi dan nilainya akan tetap tersimpan walaupun fungsi tersebut selesai dijalankan. Normalnya variabel di suatu fungsi akan langsung terhapus saat fungsi tersebut selesai dijalankan. Namun ada kalanya kita ingin variabel tersebut tetap tidak dihapus, agar bisa digunakan lagi kemudian. Jadi ketika fungsi tersebut dipanggil kembali, variabel static ini tetap akan menyimpan nilai seperti sebelumnya. Sebagai cacatan: variabel static ini tetap bersifat seperti variabel lokal, dimana nilainya hanya bisa diakses dari dalam fungsi, dan tidak berlaku untuk penggunaan di luar fungsi yang bersangkutan. Contoh penggunaannya: static $nama_variabel; Jenis variabel terakhir adalah parameter. Variabel parameter ini kadang disebut juga dengan nama argumen, yaitu sebuah variabel di dalam suatu fungsi yang nilainya dipoer dari luar fungsi (baik dari variabel global lain maupun penulisan nilai secara langsung). Contoh: 7</p><p><span>11</span> <html> <body> function add($x,$y) { $total=$x+$y; return $total; echo " = ". add(1,16); </body> </html> Output dari kode tersebut adalah: 1+16=17 Menampilkan Teks 03 Januari :36 Kode PHP bisa digunakan untuk menampilkan tulisan pada web browser yaitu dengan menggunakan perintah echo. Cara lain menampilkan tulisan di browser adalah dengan menutup tag php maka tulisan setelahnya akan dieksekusi layaknya kode HTML biasa. Contoh: If ($a==1) { Echo "variabel a bernilai 1"; else { Echo "variabel a bukan 1"; Atau If ($a==1) { Variabel a bernilai 1 else { Variabel a bukan 1 8</p><p><span>12</span> Kedua contoh diatas akan menghasilkan output yang sama. Hanya saja pada cara kedua akan lebih efisien untuk digunakan bila kita perlu menuliskan output teks yang cukup banyak ke browser. Daripada mengirimkan nilai yang ingin ditampilkan dengan menggunakan echo, alangkah lebih baik bila menggunakan sistem buka tutup tag php untuk mengurangi beban server dan mempercepat prosesnya. Namun untuk output teks yang tidak terlalu banyak seperti contoh diatas sepertinya tidak perlu repot-repot untuk membuka menutup tag php karena selisih waktu yang didapat tidak terlalu signifikan. Untuk menuliskan nilai variabel pada web browser, kita bisa langsung menuliskan nama variabelnya setelah perintah echo. Contohnya separti berikut: $a = "saya"; $b = "ganteng"; Echo "kata orang ". $a. " ". $b; Pada contoh diatas untuk menuliskan beberapa variabel atau nilai dalam 1 perintah echo digunakan kode titik ".". Kode ini digunakan untuk melakukan penggabungan nilai teks (string). Jadi pada perintah diatas, penerjemah perintah php akan melakukan 2 kegiatan yaitu penggabungan nilai string terlebih dahulu, baru kemudian menampilkannya. Lain halnya bila kita mengganti kode titik "." menjadi koma "," maka penerjemah php hanya akan melakukan 1 kegiatan yaitu menampilkan semua variabel atau nilai yang mengikutinya. Penggunaan masing-masing cara ini tergantung kondisi dan kebutuhan. Perbedaan seperti ini sebenarnya tidak terlalu signifikan untuk server-server modern yang ada sekarang ini, namun ada baiknya kita lebih berhati-hati terhadap efisiensi kode yang kita buat agar website kita tetap stabil dalam kondisi apapun. Array 03 Januari :37 Sebuah variabel biasanya hanya bisa digunakan untuk satu nilai saja. Namun ada kalanya kita ingin mengelompokkan beberapa nilai yang berbeda dalam variabel yang sama untuk mempermudah melakukan proses secara sekaligus (batch processing). Misalnya kita memiliki beberapa variabel tunggal seperti: $cars1="saab"; $cars2="volvo"; $cars3="bmw"; Mungkin bila kita hanya memiliki tiga veriabel seperti diatas, maka pemrosesannya seperti looping untuk menampilkan nilai masing-masing variabel tidak akan mengalami kendala berarti. Namun bayangkan bila kita memiliki lebih dari 3 nilai, misalnya 100 atau 500. tentunya akan menyulitkan bila harus menuliskan perintahnya sebanyak 500 kali. Untuk kasus seperti ini kita bisa menggunakan variabel array. Dalam sebuah array kita bisa menyimpan banyak nilai dalam satu variabel, dan untuk mengaksesnya kita bisa merujuk ke index dari array tersebut. Ada tiga jenis array: numeric array, association array, dan multidimensional array. Numeric array adalah array yang masing-masing elemennya ditandai dengan nomor index (dimulai dari 0). Associative array menyimpan masing-masing elemennya dengan sebuah nama untuk menngantikan nomor index. Multidimensional array adalah array didalam array, digunakan untuk mendefinisikan banyak nilai dengan struktur yang lebih kompleks. 9</p><p><span>13</span> Contoh mendefinisikan numeric array: $cars=array("saab","volvo","bmw","toyota"); Atau $cars[0]="saab"; $cars[1]="volvo"; $cars[2]="bmw"; $cars[3]="toyota"; Contoh cara mengaksesnya: $cars[0]="saab"; $cars[1]="volvo"; $cars[2]="bmw"; $cars[3]="toyota"; echo $cars[0]. " and ". $cars[1]. " are Swedish cars."; Syntax diatas akan menghasilkan output sebagai berikut: Saab and Volvo are Swedish cars. Contoh mendefinisikan associative array: $ages = array("peter"=>32, "Quagmire"=>30, "Joe"=>34); Atau $ages['peter'] = "32"; $ages['quagmire'] = "30"; $ages['joe'] = "34"; Contoh cara menggunakannya: $ages['peter'] = "32"; $ages['quagmire'] = "30"; $ages['joe'] = "34"; echo "Peter is ". $ages['peter']. " years old."; Kode diatas akan menghasilkan output sebagai berikut: Peter is 32 years old. Contoh mendefinisikan multidimensional array: 10</p><p><span>14</span> $families = array ( "Griffin"=>array ( "Peter", "Lois", "Megan" ), "Quagmire"=>array ( "Glenn" ), "Brown"=>array ( "Cleveland", "Loretta", "Junior" ) ); Syntax diatas memiliki struktur yang lebih kompleks dari array biasa, adapun bila digambarkan dengan lebih jelas, struktur dari pendefinisian diatas adalah seperti ini: Array ( [Griffin] => Array ( [0] => Peter [1] => Lois [2] => Megan ) [Quagmire] => Array ( [0] => Glenn ) [Brown] => Array ( [0] => Cleveland [1] => Loretta [2] => Junior ) ) Contoh cara mengakses nilai multidimensional array echo "Is ". $families['griffin'][2]. " a part of the Griffin family?"; Outputnya adalah seperti berikut: Is Megan a part of the Griffin family? 11</p><p><span>15</span> Fungsi pada PHP 16 Januari :45 Pada PHP kita juga bisa membuat fungsi, tidak jauh berbeda dengan fungsi yang pernah kita bahas pada materi sebelumnya mengenai javascript. Struktur utama penulisan fungsi php adalah: Function nama_fungsi () { Perintah_php; Dan untuk memanggil fungsi tersebut, cukup dengan menuliskan nama fungsinya secara langsung diikuti dengan tanda kurung "()". Contoh: Function cetak_saya() { Echo "helow.. PHP"; cetak_saya(); Seperti pada bahasan sebelumnya kita mengatahui bahwa variabel global dan lokal memiliki batasannya masing-masing dalam penggunaannya di dalam fungsi. Selain itu kita bisa menggunakan parameter untuk melakukan passing variabel ke dalam suatu fungsi. Cara mendefinisikan fungsi dengan suatu parameter adalah sebagai berikut: Function nama_fungsi ($variabel_parameter) { Perintah_php; Contoh penulisan fungsi dengan parameter: Function cetak_nama ($nama) { Echo $nama; Echo "cara pertama: "; cetak_nama("irsan keren"); Echo "cara kedua: "; $nama_irsan = "irsan ganteng"; cetak_nama($nama_irsan ); Echo "cara ketiga: "; $nama_irsan = "irsan "; cetak_nama($nama_irsan. " waaaww"); 12</p><p><span>16</span> Ada kalanya fungsi yang kita definisikan menggunakan parameter, namun pada pemanggilan fungsinya ternyata tidak menyertakan variabel yang akan di-pass sebagai parameter. Untuk itu terkadang kita perlu mendefinisikan nilai default dari parameter yang kita definisikan. Caranya adalah sebagai berikut: Function Cetak_nama($nama = "irsan") { Echo $nama; $guweh = "riza"; Cetak_nama(); // perintah di atas ini akan menghasilkan "irsan" Cetak_nama($guweh); // perintah di atas ini akan menghasilkan "riza" Pada contoh diatas kita bisa melihat bahwa cara kedua dan ketiga menggunakan variabel yang didefinisikan sebagai parameter di dalam fungsi. Namun nantinya nilai variabel ini tidak mengalami perubahan di luar fungsi. Artinya perubahan apapun yang kita lakukan terhadap variabel parameter di dalam fungsi tidak akan mengubah nilai variabel asalnya di luar fungsi. Kondisi passing variabel ini biasa disebut passing by value. Agar perubahan tersebut dapat dipertahankan di luar fungsi (biasa juga disebut passing by reference), maka kita perlu mengubah cara mendefinisikan parameternya yaitu dengan menambahkan karakter "&" diawal setiap variabel yang ingin di passing by reference. Contoh: Function Hitung1($a, $b) { $b++; $a = $a + $b; Function Hitung2(&$a, &$b) { $b++; $a = $a + $b; $x = 1; $y = 3; Hitung1($x, $y); // disini nilai variabel x = 1, dan y = 3 (tetap) Hitung2($x, $y); // disini nilai variabel x = 5, dan y = 4 (berubah) // nilai variabel $a dan $b tidak bisa diakses dari luar fungsi karena merupakan variabel lokal Selain passing by reference, kita juga bisa mengembalikan nilai dari dalam suatu fungsi agar dapat diakses dari luar fungsi. Cara ini menggunakan perintah return, agar suatu nilai atau variabel dapat di-pass keluar fungsi (sebagai nilai dari fungsi) untuk digunakan diluar dari deklarasi fungsi. Contoh: 13</p><p><span>17</span> Function Jumlah ($a, $b) { Return $a + $b; $x = 2; $y = 3; $z = Jumlah ($x, $y); //disini nilai variabel $z = 5 Tidak terbatas pada variabel tunggal, return suatu fungsi juga bisa merupakan variabel array. Perintah Kondisional 03 Januari :38 Dalam membuat program, ada kalanya kita ingin menjalankan perintah yang berbeda untuk beberapa kemungkinan kondisi yang berbeda. Dalam hal ini kita bisa menggunakan perintah if atau switch. Perintah if dapat dituliskan dengan cara sebegai berikut: if (kondisi) perintah; If (kondisi) { Perintah; If dapat dituliskan dengan kedua cara diatas, cara pertama bila hanya ada satu perintah yang akan dieksekusi saat kondisi bernilai true. Sedangkan cara kedua digunakan bila lebih dari satu perintah yang harus dieksekusi saat kondisi bernilai true. Contoh: If ($a < $b) { Echo "a lebih kecil dari b"; 14</p><p><span>18</span> Bila kondisi yang ingin kita definisikan lebih dari satu untuk beberapa baris perintah yang sama maka kita bisa menggunakan tambahan kondisi dengan perantara and atau or. Perlu diingat bahwa untuk menuliskan kondisi lebih dari satu, perlu dibuatkan tanda kurung () untuk masing-masing kondisi, dan keseluruhan kondisi. Beberapa jenis operator logical untuk kondisi adalah: Example Name Result $a and $b And TRUE if both $a and $b are TRUE. $a or $b Or TRUE if either $a or $b is TRUE. $a xor $b Xor TRUE if either $a or $b is TRUE, but not both.! $a Not TRUE if $a is not TRUE. $a && $b And TRUE if both $a and $b are TRUE. $a $b Or TRUE if either $a or $b is TRUE. Perbedaan dari &&,, and, or adalah && dan derajatnya lebih tinggi dibanding dengan and, or. Sehingga bila dituliskan berdampingan maka && dan akan lebih dulu dieksekusi dibanding dengan and, or. && derajatnya lebih tinggi dari, begitu juga and lebih tinggi derajatnya dibanding or. Contoh: a or b && c --> a or (b && c) a or b and c --> a or (b and c) a b and c --> (a b) and c true or false and false = true true or (false and false) = true (true or false) and false = false true false and false = false true false && false = true Contoh diatas bukan untuk menunjukkan rumitnya operator logical pada php, tapi hanya untuk sekedar mengingatkan bahwa kita harus konsisten dalam menggunakan operator, apakah ingin menggunakan lambang dan &&, atau lebih cenderung untuk menuliskan AND dan OR. If ((kondisi1) or (kondisi2)) { Perintah; 15</p><p><span>19</span> Bila kita ingin mendapatkan lebih dari satu kali percobaan kondisi, dengan kata lain kita ingin mendapatkan hasil yang berbeda untuk beberapa kondisi yang berbeda, maka kita bisa menggunakan if () elseif () else. Cara penulisannya adalah sebagai berikut: If (kondisi1) { Perintah2; elseif (kondisi2) { Perintah2; elseif (kondisi3) { perintah3 else { perintah4 Pada contoh diatas, bila kondisi satu bernilai true, maka perintah2 akan dieksekusi sedangkan kondisi dan perintah lain diabaikan. Bila kondisi satu false maka akan dicek kondisi2. Bila kondisi2 bernilai trus maka perintah2 akan dieksekusi, kondisi dan perintah lain diabaikan. Bila kondisi 1 dan 2 false maka akan dicek kondisi 3, dan bila kondisi 3 bernilai true maka perintah3 akan dieksekusi, perintah4 diabaikan. Bila semua kondisi dari 1 sampai 3 false, maka perintah4 akan dieksekusi. Selain if perintah lain yang berhubungan dengan perintah kondisional yaitu switch. if ($i == "a") { echo "i = a"; elseif ($i =="b") { echo "i = b"; elseif ($i == "c") { echo "i = c"; switch ($i) { case "a": echo "i = a"; break; case "b": echo "i = b"; break; case "c": echo "i = c"; break; Pada contoh di atas penggunaan if ataupun switch akan menghasilkan output yang sama. Perlu diperhatikan bahwa pada setiap case, selalu diakhiri dengan perintah "break;". Hal ini untuk menghentikan proses pengecekan terhadap case selanjutnya apabila kondisi case di atasnya sudah terpenuhi. 16</p></p><p><span>20</span> Looping/Pengulangan 22 Januari :14 Looping seringkali kita perlukan dalam pemrograman dengan php, terutama bila kita berurusan dengan database atau array. Looping/pengulangan akan dilakukan dalam jumlah tertentu, ataupun selagi kondisi yang kita tentukan masih berlaku. Untuk looping ini kita bisa menggunakan perintah for atau while. for (expr1; expr2; expr3) { statement Sama seperti bahasan pada javascript, expr1 hanya akan dieksekusi sekali pada saat looping dimulai, biasanya untuk mendefinisikan nilai awal. Expr2 akan dievaluate (biasanya berupa kondisi yang bernilai true atau false) setiap kali akan memulai satu putaran looping, apabila nilainya true maka looping akan dilanjutkan, bila bernilai false maka looping akan dihentikan. Expr3 akan dieksekusi setiap kali satu putaran looping berakhir, biasanya untuk memanipulasi nilai awal agar kondisi pada expr2 bisa berubah setelah beberapa kali putaran tertentu. Contoh penggunaan: /* example 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; /* example 2 */ for ($i = 1; ; $i++) { if ($i > 10) { break; echo $i; /* example 3 */ $i = 1; for (; ; ) { if ($i > 10) { break; echo $i; $i++; /* example 4 */ for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++); 17</p><p><span>21</span> Keempat contoh penggunaan for diatas sebenarnya akan menghasilkan output yang sama, hanya saja cara mendefinisikannya berbeda. Contoh pertama merupakan contoh penggunaan for yang ideal, dan paling sering ditemui karena penggunaan syntax yang efisien dan readable oleh manusia. Contoh kedua tidak menggunakan expr2 yaitu kondisi yang menentukan apakah looping akan berlanjut atau tidak, sehingga secara default looping akan terus dijalankan sampai kita mendefinisikan perintah break. Contoh ketiga benar-benar menghilangkan semua expr baik nilai awal, kondisi, maupun manipulasinya. Sehingga kita harus mendefiniskan sendiri secara manual nilai awal di luar looping, menentukan kondisi break di dalam looping dan juga memanipulasi secara manual nilai awal di setiap perulangan looping. Cara ini tidak salah, walaupun mungkin tidak terlalu lumrah, namun ada kalanya kita mengalami suatu kondisi yang membuat kita lebih nyaman untuk mengatur kondisi perulangan dari dalam looping itu sendiri. Contoh terakhir yang keempat merupakan contoh syntax yang paling efisien. Penggunaan variabel $j pada contoh ini hanya untu membuktikan bahwa kita bisa mengeksekusi beberapa perintah untuk setiap segmen expr (ekspresi). Namun cara ini mungkin kurang begitu populer karena kode yang tertulis disana tidak newbie friendly, sulit dibaca oleh manusia. Khusus untuk membantu looping dalam sebuah array, ada fungsi khusus yang didefinisikan sebagai berikut: foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement Array_expression merupakan ekspresi yang mendefinisikan sebuah array, ekspresi ini bisa berupa variabel dengan tipe array, atau bisa juga berupa pemberian nilai array secara langsung. Contoh pertama menjelaskan bahwa pada setiap nilai record array yang didefinisikan pada array_expression akan dikembalikan nilai setiap recordnya sebagai variabel $value. Sedangkan pada contoh kedua, untuk setiap record pada array akan didefinisikan dengan dua variabel yaitu $key sebagai index array dan variabel $value sebagai nilai array. $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; // $arr sekarang bernilai array(2, 4, 6, 8) unset($value); // menghapus referensi pada variabel $value yang digunakan pada foreach Berikut contoh cara mengeprint nilai array dengan menggunakan while dan foreach: $arr = array("one", "two", "three"); reset($arr); while (list(, $value) = each($arr)) { echo "Value: $value<br />\n"; foreach ($arr as $value) { echo "Value: $value<br />\n"; 18</p><p><span>22</span> $arr = array("one", "two", "three"); reset($arr); while (list($key, $value) = each($arr)) { echo "Key: $key; Value: $value<br />\n"; foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n"; kedua cara diatas baik yang menggunakan while maupun yang menggunakan foreach akan menghasilkan output yang sama. Berikut contoh beberapa cara untuk mengeprint setiap record array yang berbeda. /* foreach example 1: value only */ $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Current value of \$a: $v.\n"; /* foreach example 2: value (with its manual access notation printed for illustration) */ $a = array(1, 2, 3, 17); $i = 0; /* for illustrative purposes only */ foreach ($a as $v) { echo "\$a[$i] => $v.\n"; $i++; /* foreach example 3: key and value */ $a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; /* foreach example 4: multi-dimensional arrays */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; 19</p><p><span>23</span> foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; /* foreach example 5: dynamic arrays */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; Dari contoh diatas kita dapat melihat perbedaan cara mengeprint masing-masing record untuk bebera[a jenis array yang berbeda. Untuk multidimensionala array kita juga dapat menberikan beberapa perlakuan saat mengakses setiap recordnya sebagai berikut: $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { // $a contains the first element of the nested array, // and $b contains the second element. echo "A: $a; B: $b\n"; Contoh diatas akan menghasilkan output sebegai berikut: A: 1; B: 2 A: 3; B: 4 Contoh lain penggunaan list pada looping pemanggilan record array: $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a)) { // Note that there is no $b here. echo "$a\n"; 20</p><p><span>24</span> Contoh diatas akan menghasilkan output sebagai berikut: 1 3 Lalu apa yang terjadi bila kita salah mendefinisikan list yang jumlah nya lebih dari elemen array itu senndiri? Berikut contohnya: $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b, $c)) { echo "A: $a; B: $b; C: $c\n"; Kode diatas akan menghasilkan output sebagai berikut: Notice: Undefined offset: 2 in example.php on line 7 A: 1; B: 2; C: Notice: Undefined offset: 2 in example.php on line 7 A: 3; B: 4; C: Setelah kita memahami penggunaan for dan foreach, kita akan mencoba membahas masih mengenai looping, namun kali ini dengan menggunakan perintah while. Struktur dasar penulisan syntax while adalah sebagai berikut: while (expr) statement Maksud dari penggunaan while seperti pada struktur diatas adalah untuk mengulangi baris perintah yang diwakili dengan "statement" terus menerus selagi kondisi pada "expr" bernilai true. Saat kondisi "expr" berubah menjadi false, maka looping akan berhenti. Ada kalanya kondisi "expr" akan bernilai false pada saat pertama kali dijalankan yang mengakibatkan baris perintah "statement" tidak akan pernah dijalankan satu kalipun. Beberapa cara menuliskan perintah while yang memiliki beberapa baris perintah "statement": while (expr): statement... endwhile; While (expr) { statement... 21</p><p><span>25</span> Berikut beberapa contoh penggunaan while: /* example 1 */ $i = 1; while ($i <= 10) { echo $i++; /* the printed value would be $i before the increment (post-increment) */ /* example 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile; Kedua contoh diatas akan menghasilkan output yang sama. Dimana pada contoh pertama variabel $i akan dicetak kemudian nilainya langsung ditambahkan 1 pada baris perintah yang sama. dan pada contoh kedua nilai variabel $i dicetak terlebih dahulu, baru kemudian pada baris selanjutnya ada perintah untuk menambahkan nilai variabel $i. Ada cara lain untuk menuliskan perintah while, yaitu dengan do-while. Namun cara ini bekerja dengan cara yang berbeda dari while yang kita bahas diatas. $i = 0; do { echo $i; while ($i > 0); Pada contoh diatas kita lihat kondisi while dituliskan di bagian bawah dari looping. Hal ini berarti statement yang berada di dalam looping pasti akan dieksekusi dulu minimal satu kali, baru setelah itu kondisi while diperiksa, apabila bernilai true maka looping akan dilanjutkan, dan bila bernilai false maka looping akan berhenti. Dejavu dengan javascript yang pernah kita bahas pada materi sebelumnya? Ya, do-while pada php ini memiliki konsep yang sama seperti yang ada pada javascript, pada dasarnya apapun bahasa pemrogramannya masing-masing akan memiliki "pola syntax" yang sama, hanya cara penulisan ejaaannya yang berbeda. Konsep Object Oriented Programming 22 Januari :37 Konsep dari pemrograman berorientasi objek (object oriented programming - OOP) yaitu membuat struktur dari program yang merepresentasikan objek seperti pada dunia nyata, secara sederhana ini adalah konsep dimana objek tersebut mempunyai sifat tertentu (atribut), dan memiliki kemampuan 22</p><p><span>26</span> untuk bereaksi terhadap suatu tindakan (function). Objek ini juga bisa mempunyai sifat khusus yang tidak bisa dilihat dari luar dan hanya berlaku untuk intern objek itu sendiri. Pada OOP juga dikenal penurunan sifat pada objek lainnya yang sejenis, dan juga beberapa fungsi yang sama namun bisa menghasilkan output yang berbeda untuk objek yang berbeda. Contoh sederhana pada objek di dunia nyata misalnya untuk objek "sepeda". Sepeda memiliki atribut seperti warna cat, ukuran roda depan dan belakang, tinggi tempat duduk, dan lain-lain. Sepeda juga memiliki function tertertu misalnya "dikayuh" atau "parkir". Sepeda bisa memiliki sub kelompok seperti sepeda gunung, sepeda lipat, sepeda keranjang, dan lainnya. Masing-masing sepeda memiliki fungsi "dikayuh" namun untuk masing-masing sepeda, terutama yang keompoknya berbeda, akan memiliki sifat yang berbeda pula walaupun nama fungsinya sama-sama "dikayuh", yaitu misalnya pada sepeda gunung daya kayuhnya bisa lebih besar dari sepeda keranjang walaupun tenaga yang kita keluarkan sama. Dari sedikit penjelasan diatas, kita dapat memahami beberapa konsep utama dalam OOP yaitu: encapsulation, inheritance, polymorphism dan message. Encapsulation (kapsul) adalah menyembunyikan detail dari objek yang tidak perlu diketahui oleh selain objek itu sendiri, jadi objek hanya dikenal dari sebagian sifatnya, bukan keseluruhannya. Ada atribut atau fungsi yang hanya berlaku dan bisa diakses dari dalam objek itu sediri, dan tidak bisa diakses dari luar objek. Hal ini untuk meminimalisir kompleksitas dari suatu objek. Dari luar objek akan terlihat sederhana, dan penggunaannyapun menjadi sederhana, tanpa melihat apa yang terjadi didalamnya. Untuk analogi dengan konsep sepeda tadi bisa diumpamakan seperti tekanan udara pada roda yang tidak terlihat dari luar namun dari dalam objek itu sendiri memiliki peranan penting untuk menunjang berat sepeda dan pengendaranya. Inheritance (penurunan sifat) yaitu kondisi dimana sifat-sifat dari suatu objek dapat juga dimiliki oleh objek lain yang secara hirarki merupakan turunan dari objek tersebut. Hal ini memungkinkan beberapa kelas objek yang berbeda memiliki atribut dan fungsi yang sama. Namun penurunan sifat ini tidak bersifat mengikat, karena kelas objek turunannya tetap bisa memiliki sifat sendiri yang berbeda. Analogi pada cerita sepeda seperti sebelumnya adalah seperti dari superclass sepeda, kita bisa mempunyai beberapa kelas turunan seperti sepeda gunung, sepeda keranjang, sepeda lipat, dan lainnya. Polymorphism (kesamaan bentuk) yang dalam hal ini menggambarkan kesamaan dalam hal fungsi yang digunakan terutama untuk objek yang berbeda kelas dalam satu turunan yang sama. Misalnya sebuah objek dari suatu kelas memiliki fungsi dengan nama dan parameter yang sama, namun cara memproses parameter tadi bisa saja berbeda untuk objek yang berada pada kelas yang berbeda. Sesuai analogi sepeda tadi, kondisi ini bisa diumpamakan seperti sepeda gunung dan sepeda lipat memiliki fungsi yang sama yaitu "dikayuh". Namun ternyata proses "menayuh" dari kedua jenis sepeda ini penanganannya bisa berbeda. Pada sepeda gunung kita bisa menyetel gigi agar lebih enteng dikendarai, sedangkan pada sepeda lipat, tidak ada sub proses memindahkan gigi, dan tenaga yang dikeluarkan untuk "mengayuhnya" diperkirakan sama. Message (interaksi antar objek) masing-masing objek yang terbentuk dari class tertentu bisa saling berkomunikasi (bertukar nilai variabel atau saling memanggil fungsi). Disini berarti suatu objek tidak terlepas hanya bisa mengendalikan fungsi yang berlaku pada objek itu saja. Bisa juga suatu objek akan memanggil fungsi lain ynang tidak pernah dibuat sebelumnya. Untuk contoh analogi sepedanya bisa kita bayangkan seperti ada objek sepeda dengan fungsi "dikayuh" untuk setiap jenis kelas objek. Fungsi ini bisa diakses dari luar objek yaitu misalnya objek "manusia" akan bisa mengakses fungsi "dikayuh" yang ada pada objek sepeda. 23</p><p><span>27</span> Ada dua hal penting yang harus kita ingat dalam pemahaman awal dari pembuatan objek dalam php terutama dalam yii framework yaitu class dan objek itu sendiri. Class merupakan kerangka dari suatu object yang berisi definisi-definisi dari variabel dan fungsi. Sedangkan objek adalah sebuah variabel yang dibentuk dari suatu class. Class dapat merupakan implementasi dari tabel yang terdapat di dalam database. Dalam hal ini class akan berisi fungsi-fungsi yang berkaitan secara langsung dengan operasi database tersebut. Namun ada kalanya juga class mendefinisikan kerangka objek yang tidak berkaitan dengan database. Contoh penulisan class dalam yii adalah sebagai berikut: class Menu extends CActiveRecord { /** * Returns the static model of the specified AR class. string $classname active record class name. Menu the static model class */ public static function model($classname= CLASS ) { return parent::model($classname); /** string the associated database table name */ public function tablename() { return 'menu'; /** array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('flag', 'numerical', 'integeronly'=>true), array('menu_idn, menu_eng', 'length', 'max'=>30), array('aksi, alt_idn, alt_eng', 'length', 'max'=>60), array('id_parent, id_menu_kategori', 'safe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, menu_idn, menu_eng, id_parent, aksi, flag, id_menu_kategori, alt_idn, alt_eng', 'safe', 'on'=>'search'), ); /** array relational rules. */ 24</p><p><span>28</span> public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'idmenukategori' => array(self::belongs_to, 'MenuKategori', 'id_menu_kategori'), ); /** array customized attribute labels (name=>label) */ public function attributelabels() { return array( 'id' => 'ID', 'menu_idn' => 'Menu Idn', 'menu_eng' => 'Menu Eng', 'id_parent' => 'Id Parent', 'aksi' => 'Aksi', 'flag' => 'Flag', 'id_menu_kategori' => 'Id Menu Kategori', 'alt_idn' => 'Alt Idn', 'alt_eng' => 'Alt Eng', ); /** * Retrieves a list of models based on the current search/filter conditions. CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */ public function search() { // Warning: Please modify the following code to remove attributes that // should not be searched. $criteria=new CDbCriteria; $criteria->compare('id',$this->id); $criteria->compare('menu_idn',$this->menu_idn,true); $criteria->compare('menu_eng',$this->menu_eng,true); $criteria->compare('id_parent',$this->id_parent,true); $criteria->compare('aksi',$this->aksi,true); $criteria->compare('flag',$this->flag); $criteria->compare('id_menu_kategori',$this->id_menu_kategori,true); $criteria->compare('alt_idn',$this->alt_idn,true); $criteria->compare('alt_eng',$this->alt_eng,true); return new CActiveDataProvider($this, array( 25</p><p><span>29</span> )); 'criteria'=>$criteria, /** * fungsi tambahan */ private function RetrieveMenu($kategori='1', $lang='idn') { $sql = "select id, menu_$lang as menu, aksi, alt_$lang as alt, id_parent, have_child from menu where id_menu_kategori=$kategori and flag=1 order by id asc"; $hasil=yii::app()->db->createcommand($sql)->queryall(); return $hasil; private function susunmenu($arr, $parent) { foreach ($arr as $row) { if ($row["id_parent"]==$parent) { if ($row["have_child"]==true) { $child = Menu::model()->susunMenu($arr, $row["id"]); $menu[] = array('label'=>$row['menu'], 'url'=>$row['aksi'], 'items'=>$child); else { $menu[] = array('label'=>$row['menu'], 'url'=>$row['aksi']); return $menu; public function MenuHorizontal($lang="idn") { $menuh = Menu::model()->RetrieveMenu("1", $lang); $menu = array('items'=>menu::model()->susunmenu($menuh, "0")); return $menu; Seperti yang kita lihat pada contoh diatas class "Menu" diawali dengan syntax class Menu extends CActiveRecord Yang berarti kelas "Menu" merupakan turunan dari kelas "CActiveRecord". Sedangkan "CactiveRecord" sendiri merupakan kelas yang telah didefinisikan oleh Yii. Dengan perintah tersebut berarti kelas "Menu" akan memiliki semua sifat (fingsi dan variabel) yang dimiliki oleh kelas "CActiveRecord". Peurunan sifat seperti ini yang kita namakan inheritance dalam OOP. 26</p><p><span>30</span> Class memiliki banyak fungsi yang didefinisikan di dalamnya. Kita bahkan juga bisa mengubah syntax fungsi yang sudah ada dari superclass (parent) agar dapat melakukan proses yang lebih detil dari sebelumnya. Pada contoh diatas memang belum ada yang diganti karena untuk saat ini dirasa belum perlu. Namun cara seperti ini yang dinamakan polymorphism dalam OOP.Dari beberapa fungsifungsi ini ada yang bersifat public dan private seperti pada deklarasinya. Fungsi yang bersifat public artinya fungsi tersebut dapat diakses dari luar objek. Fungsi seperti ini dalam OOP yang kita namakan message. Untuk mendeklarasikan objek dari kelas, dan syntax memanggil salah satu fungsinya adalah sebagai berikut: $model=new Menu; $listmenu = $menu->menuhorizontal(); Berikut cara memanggil fungsi yang terdapat di dalam objek tanpa mendefinisikan objeknya terlebih dahulu $listmenu = Menu::model()->MenuHorizontal(); Selain fungsi yang bersifat public yang dapat diakses dari luar, ada juga fungsi yang bersifat private yang berarti fungsi ini tidak akan bisa diakses dari luar suatu objek. Fungsi ini hanya digunakan dari dalam objek itu sendiri untuk menunjang fungsi lain dan sekaligus membuat kode progam yang kita buat lebih reusable dan menyembunyikan detil fungsi-fungsi yang tidak diperlukan dari luar objek untuk membuat objek tersebut terlihat sederhana. sifat seperti ini yang kita namakan encapsulation. Pada contoh class diatas kita melihat fungsi private function RetrieveMenu($kategori='1', $lang='idn') Fungsi ini tidak dapat diakses dari luar objek, karena didefinisikan sebagai private. Hal ini juga dibuat untuk mencegah user berinteraksi langsung dengan database. Dalam pemrograman dengan framework Yii sebisa mungkin kita mendefinisikan semua fungsi yang berkaitan dengan database di dalam objek model. Yang kemudian user hanya akan melihat hasil requestnya dalam bentuk view yang secara fisik sudah tidak merepresentasikan objek lagi. Kenapa harus demikian? Hal ini kita lakukan untuk menurunkan tingkat kompleksitas yang harus dihadapi programmer terutama saat kita mengembangkan aplikasi yang nantinya akan dikelola oleh banyak orang dan atau secara bergantian. Ini juga berguna untuk memisahkan proses bisnis dengan tampilan, saat kita melakukan perubahan pada tampilan, maka kita tidak akan perlu mengubah sedikitpun kode proses bisnis yang lain. Begitu pula sebaliknya bila kita melakukan perubahan proses bisnis untuk perbaikan performance, maka kita tidak perlu mengubah kode pada tampilannya. 27</p><p><span>31</span> Database PostgreSQL 22 Januari :15 Untuk menunjang website yang kita buat agar menjadi lebih dinamis, kita memerlukan database untuk menyimpan data yang akan ditampilkan. Ada beberapa alternatif database yang bisa kita gunakan, pada pembuatan website sebelumnya kita menggunakan database server MySQL karena lebih sederhana dan tentunya gratis. Sedangkan kali ini kita juga akan menggunakan database yang bersifat gratis, namun lebih powerful dalam hal ketahanan menyimpan data dalam jumlah besar dan juga mendukung fungsi proses database yang lebih kompleks. Yap, kita akan mencoba menggunakan database server PostgreSQL. Secara default bila kita menggunakan web server XAMPP, database PostgreSQL belum termasuk dalam bundel aplikasinya. Jadi kita harus menginstallnya secara terpisah. Namun bagi yang belum pernah mencoba menginstalll PostgreSQL tidak usah khawatir karena installer database ini sudah termasuk installer next generation (klik next sampai finish). Namun tidak seperti mysql yang sudah mempunyai password default, pada PostgreSQL kita harus mendefinisikan password sendiri saat instalasi. jangan sampai lupa untuk mengisikan default password untuk membuka databasenya. Password bebas bisa diisi apa saja, asal JANGAN SAMPAI LUPA. Karena bila password ini sampai lupa akan repot untuk merestorenya kembali. Untuk pembelajaran ini kita akan mencoba untuk menggunakan database PostgreSQL di komputer lokal bersama dengan web servernya. Mulai dari instalasinya membuat tabel sampai pada membuat backup database. Namun untuk implementasinya di server BPS kita akan mewelatkan bagian membuat database dan tabel, karena kita hanya perlu merestore database kita yang sudah kita buat sebelumnya di server lokal. Instalasi PostgreSQL 22 Januari :25 Seperti yang disebutkan sebelumnya instalasi database PostgreSQL ini termasuk dalam installer next generation. Cukup dengan klik ganda pada file installernya misalnya "postgresql windows.exe". Selanjutnya adalah klik next, next, sampai installer meminta untuk memasukkan password. Perlu diingat bahwa password yang dimasukkan ini (bebas apa saja) akan digunakan untuk user "postgres" yang levelnya adalah admin. Setelah itu ikuti next terus sampai pada layar finish, user akan diminta untuk menjalankan stackbuilder. Unchek saja karena kita tidak perlu menjalankan stackbuilder berfungsi untuk mencari update program pendukung, 28</p><p><span>32</span> Isikan password, bebas bisa diisi kombinasi huruf, angka dan underscore jangan sampai lupa passwordnya. Setelah selesai instalasi, service database postgresql secera otomatis langsung dijalankan. posgresql memiliki banyak interface untuk memanipulasi databasenya bahkan juga bisa dengan menggunakan web browser seperti halnya mysql dengan phpmyadmin, postgresql juga memiliki phppgadmin. Namun untuk memudahkan kita dalam mengoperasikan database dengan lebih optimal, kita akan menggunakan interface PgAdmin3 yang secara otomatis sudah terinstall bersama dengan database itu sendiri. 29</p><p><span>33</span> Saat pertama menjalankan PgAdmin3, klik pada tree icon "PostgreSQL 9.2 (localhost:5432)", dan postgre akan meminta password untuk postgres. Masukkan password yang sama seperti pada waktu instalasi. Dengan ini kita sudah masuk ke environment postgre dengan level admin dan siap untuk melakukan proses database lebih lanjut. Membuat database baru 22 Januari :38 Untuk membuat database kita akan menggunakan fasilitas yang ada pada aplikasi PgAdmin3. setelah kita login ke aplikasi ini, kita akan melihat sidebar di sebelah kiri layar. Klik kanan pada baris "databases" lalu pilih "new database". Berikutnya akan muncul window untuk mendefinisikan database baru. Kita hanya perlu mengisikan nama databasenya, sisanya kita biarkan dalam keadaan default. 30</p><p><span>34</span> Kita asumsikan nama database diisi dengan "pringsewukabdb". Klik ok untuk membuat database ini. Sekarang kita telah memiliki database dengan nama "pringsewukabdb", namun isinya masih kosong, belum ada tabel ataupun data di dalamnya. Tipe Data 23 Januari :26 Pada postgre ada nayak macam tipe data. Namun yang akan kita bahas adalah tipe data yang mungkin akan sering kita gunakan. Pertama adalah jenis numeric yang terdiri dari beberapa tipe data yaitu: Name Storage Size Description Range smallint 2 bytes small-range integer to integer 4 bytes typical choice for integer to bigint 8 bytes large-range integer to decimal variable user-specified precision, exact numeric variable user-specified precision, exact real 4 bytes variable-precision, inexact up to digits before the decimal point; up to digits after the decimal point up to digits before the decimal point; up to digits after the decimal point 6 decimal digits precision 31</p><p><span>35</span> double precision 8 bytes variable-precision, inexact 15 decimal digits precision smallserial 2 bytes small autoincrementing integer serial 4 bytes autoincrementing integer bigserial 8 bytes large autoincrementing integer 1 to to to Pasted from < Lalu yang berikutnya adalah tipe data dengan jenis karakter (satuan huruf): Name character varying(n), varchar(n) character(n), char(n) text Description variable-length with limit fixed-length, blank padded variable unlimited length Pasted from < Yang berikutnya adalah time data yang berkaitan dengan waktu: Name Storage Size Description Low Value High Value Resolution timestamp [ (p) ] [ without time zone ] 8 bytes both date and time (no time zone) 4713 BC AD 1 microsecond / 14 digits timestamp [ (p) ] with time zone 8 bytes both date and time, with time zone 4713 BC AD 1 microsecond / 14 digits date 4 bytes date (no time of day) 4713 BC AD 1 day time [ (p) ] [ without time zone ] 8 bytes time of day (no date) 00:00:00 24:00:00 1 microsecond / 14 digits time [ (p) ] with time zone 12 bytes times of day only, with time zone 00:00: :00: microsecond / 14 digits interval [ fields ] [ (p) ] 12 bytes time interval years years 1 microsecond / 14 digits Pasted from < 32</p><p><span>36</span> Contoh dari timestamp ini adalah: TIMESTAMP tanpa timezone TIMESTAMP dengan timezone ' :23:54' ' :23:54+02' Untuk outputnya, jenis waktu ini memiliki beberapa kemungkinan output standar/default: SQL traditional style 12/17/ :37:16.00 PST Postgres original style Wed Dec 17 07:37: PST Tipe data yang terakhir yang akan kita bahas adalah boolean: Name Storage Size Description boolean 1 byte state of true or false Pasted from < Tipe data ini hanya memiliki nilai true atau false. Namun untuk mendefinisikan true dan false bisa dengan beberapa cara TRUE 't' 'true' 'y' 'yes' 'on' '1' FALSE 'f' 'false' 'n' 'no' 'off' '0' Normalisasi Database 23 Januari :27 Normalisasi database adalah proses untuk membuat database kita menjadi "normal" dan terbebas dari segala bentuk anomali. Anomali sendiri adalah kondisi dimana tabel pada database bersifat tidak efisien dan cenderung menghabiskan sumber daya secara berlebihan. Normalisasi database kita lakukan setelah kita membuat rancangan database dan sebelum kita mengimplementasikannya ke aplikasi database. Misalnya kita memiliki tabel dengan nama "artikel" yang memiliki field-field dan tipe data sebagai berikut: 33</p></p><p><span>37</span> Tabel_Artikel field id Tipe data Serial (big int) Judul_artikel Var char (60) Isi_artikel Text Kategori_artikel Var char (60) Misalnya pada tabel diatas kita akan mengisikan "judul_artikel" dan "isi_artikel" seperti biasa, dengan field "id" sebagai identitas yang di generate secara otomatis, dan field "kategori_artikel" akan diisikan kategori seperti "berita resmi statistik", atau "berita kegiatan", atau "tentang BPS", dan berbagai macam kategori lain yang kita buat. Cara seperti ini bisa saja kita lakukan dan tidak akan menimbulkan error apapaun pada aplikasi yang kita buat. Namun bila kita melihatnya dalam skala yang lebih besar, misalnya kita telah memiliki 100 artikel saja dan 80 dari artikel itu adalah dari kategori "berita resmi statistik", maka kita akan memiliki 80 record yang kolom kategorinya berisi nilai "berita resmi statistik". Ini berarti kita telah mengulangi isian yang sama dengan tipe teks sebanyak 80 kali. Karena tipe teks kapasitas penyimpanannya jauh lebih besar daripada tipe numeric ini artinya kita telah memboroskan sumberdaya yang ada pada server untuk menyimpan data dan untuk menarik data dalam jumlah yang lebih besar. Untuk menghentikan pemborosan sumber daya ini sebenarnya kita masih bisa melakukan pengelompokan pada kolom kategori daripada menuliskan kategorinya berulang-ulang (walaupun hal ini bisa dilakukan oleh php). Untuk itu akan lebih baik jika kita memiliki dua buah tabel yaitu Tabel_Artikel field id Tipe data Serial (big int) Judul_artikel Var char (60) Isi_artikel Id_kategori_artikel Text integer Tabel_Kategori field Tipe data id Serial (big int) kategori Var char (60) Dengan menggunakan 2 tabel diatas, maka kapasitas penyimpanan akan menjadi lebih optimal terutama untuk data dalam jumlah besar. Dalam dunia per-database-an, normalisasi bertujuan untuk meminimalisasi pengulangan data (redundancy), dan untuk memudahkan idetifikasi entitas. Normalisasi sebenarnya ada beberapa tingkatan yaitu: 34</p><p><span>38</span> 1nf: setiap atribut hanya memiliki nilai tunggal pada setiap record Tidak boleh ada grup atribut yang berulang 2nf: Memenuhi kaidah 1nf setiap atribut yang bukan primary key tergantung secara fungsional terhadap semua primary key dan bukan hanya sebagian primary key (ketergantungan penuh pada primary key) 3nf: Memenuhi 2nf setiap atribut yang bukan primary key tidak tergantung secara fungsional terhadap atribut bukan primary key yang lain dalam relasi tsb (tidak bergantung pada non primary key) Bcnf(Boyce Codd normal form): jika dan hanya jika setiap determinan yang ada pada relasi tersebut adalah candidate key Untuk normalisasi ke bentuk BCNF, maka tabel 3NF didekomposisi menjadi beberapa tabel yang masing-masing memenuhi BCNF Namun kita tidak perlu merisaukan segala bentuk normalisasi ini. Asalkan kita sudah mengoptimalkan bentuk database kita dan menghindari redundancy, maka secara otomatis kita telah membantu menormalkan database yang kita buat. Relasi Antar Tabel 22 Januari :30 Relasi antar tabel adalah hubungan antara primary key suatu tabel dengan foreign key pada tabel lain. Bagi yang terbiasa menggunakan database Microsoft Access, ini sama saja dengan relationship diagram. Namun cara mendefiniskannya saja yang berbeda. Pada postgre kita harus mendefinisikan satu persatu field mana yang berhubungan dengan field pada tabel lain. Nantinya relasi yang terbentuk akan bersifat one to many, dimana one pada primary key suatu tabel dan many pada foreign key di tabel yang lain. Seperti pada contoh normalisasi di bahasan sebelumnya, relasi antar tabel ini menjembatani antar tabel yang terkait. Misalnya: Tabel_Artikel field id Tipe data Serial (big int) Judul_artikel Var char (60) Isi_artikel Id_kategori_artikel Text integer 35</p><p><span>39</span> Tabel_Kategori field Tipe data id Serial (big int) kategori Var char (60) Diatas kita melihat pada tabel "Tabel_Artikel" ada field yang bernama "id_kategori"artikel". Field ini berkaitan dengan tabel "Tabel_Kategori" pada field "id". Pada tabel "Tabel_Artikel" field "id_kategori_artikel" merupakan foreign key yang merujuk pada tabel "Tabel_Kategori" khususnya pada field "id" yang merupakan primary key. Ini kan menciptakan hubungan one to many, dimana 1 baris pada tabel "Tabel_Kategori" akan menjelaskan beberapa baris data pada tabel "Tabel_Artikel". Dengan mendefinisikan relasi antar tabel ini berarti kita telah mendefinisikan ketergantungan suatu tabel terhadap tabel yang lain. Dimana pada contoh diatas tabel "Tabel_Artikel" tidak akan pernah bisa ditambahkan record baru apabila kategorinya belum ditambahkan pada "Tabel_Kategori". Sehingga tidak akan terjadi miss link dimana ada artikel yang tidak mempunyai kategori. Membuat Tabel 22 Januari :39 Setelah kita memiliki database, kita akan mencoba mengisi database ini dengan tabel yang dibutuhkan dalam website kita. Pada sidebar kiri layar, expand pada nama database > schemas > public. Dibawah item tersebut akan ada satu item dengan nama "tables". Klik kanan pada item "tables" tadi, lalu pilih "new table". Kemudian akan muncul window baru untuk memasukkan rincian tabel. Adapun yang harus kita isi adalah pada tab general -> nama tabel. 36</p><p><span>40</span> Lalu pada tab column -> klik tombol add, maka akan muncul window baru untuk mengisikan detail kolom-kolom pada tabel tersebut. Isikan nama kolom, dan tipe datanya untuk masing-masing kolom, lalu klik OK pada window pengisian column. Namun jangan klik OK pada window Table dulu, karena kita masih harus mengulangi proses penambahan kolom untuk kolom-kolom selanjutnya pada tabel tersebut. Setelah selesai mengisikan kolom-kolom (field) yang diperlukan, selanjutnya dalah mendefinisikan primary key dan (atau) foreign key. Buka tab constraints lalu di sebelah kiri tombol "add" pilih "primary key" lalu baru klik "add". Berikutnya akan muncul window untuk memilih primary key. 37</p><p><span>41</span> Buka tab "columns" pada window primary key, lalu pada rincian "column" pilih nama kolom yang akan dijadikan identitas tabel, lalu klik Add. Tambahkan lagi kolom lainnya bila ingin memiliki primary key lebih dari satu field, bila tidak langsung klik tombol OK pada window "new primary key" ini. Setelah itu kita bisa mendefinisikan relasi antar tabel, dengan cara memilih "foreign key" di sebelah kanan tombol "add" pada window new table sebelumya, lalu klik add. Nanti akan muncul window "new foreign key". Kita baru bisa mendefinisikan foreign key apabila tabel rujukan dari relasi ini juga telah dibentuk. Isikan rincian "references" dengan nama tabel rujukan. Pilih field dari tabel lokal di rincian "local column" yang akan merujuk ke field dari tabel lain. Lalu pada rincian "referencing" pilih nama field dari tabel lain yang akan dijadikan rujukan oleh field lokal. Klik "add", lalu ulangi bila masih ada foreign key lainnya. Bila sudah selesai, klik ok pada window "foreign key". Sekarang setelah kita selesai mendefinisikan tabel, klik OK untuk membentuk tabel ini. Ulangi mendefinisikan tabel lain hingga seluruh tabel yang diperlukan terbentuk. 38</p><p><span>42</span> Membuat Backup Database 23 Januari :40 Backup database sangat kita perlukan untuk membuat cadangan kondisi database seandainya sewaktu-waktu website kita mengalami gangguan, jadi kita tidak akan kehilangan data yang kita simpan di database. Selain itu backup database ini juga kita perlukan untuk "memindahkan" database dari komputer lokal kita ke remote server yaitu server yang ada di BPS RI. Caranya adalah masih dengan menggunakan aplikasi PgAdmin3, setelah login dan memilih database kerja, klik kanan pada nama database yang akan di buatkan backup-nya, lalu pilih "backup". Agar memudahkan kita dalam penyimpanan data, kita akan memisahkan backup skema tabel dan backup datanya. Untuk itu kita akan melakukan backup sebanyak dua kali untuk keperluan tersebut. Nanti dari window kecil yang muncul, pada tab "file option" (bagian bawah layar) kita bisa mendefinisikan rincian yang ingin kita backup. Masukkan format "plain" lalu tentukan nama dan lokasi file penyimpanan backup. Lalu buka tab "Dump option #1" Pada tab ini pilih rincian "only schema", beri tanda (check). Lalu klik backup untuk membuat backup skema tabel. Setelah proses selesai, klik "done". Perlu dikatahui bahwa backup skema ini adalah hanya membuat backup struktur tabelnya saja mulai dari nama tabel, field-field tabel beserta tipe 39</p><p><span>43</span> data masing-masingnya, primary key dan foreign key juga akan disipan informasinya. Untuk membuat backup isi datanya sendiri dapat kita lakukan dengan cara yang hampir sama yaitu klik nama database, lalu pilih backup. Kemudian masih sama dengan sebelumnya yaitu memilih format "plain" lalu menentukan nama file backup. Setelah itu yang agak sedikit berbeda adalah saat kita membuka tab "Dump Option #1", kita akan menandai (check) pada pilihan "only data". Lalu buka tab "Dump Option #2". Tandai pilihan "use insert commands", lalu klik "backup". Setelah proses backup selesai, klik "Done". Dengan melakukan kedua jenis backup ini berarti kita sudah menyimpan keseluruhan database kita ke dalam format plain teks yang nantinya bisa kita implementasikan ke server BPS dengan lebih mudah. Dan perlu diketahui juga apabila kita sudah mempunyai backup skema dan selanjutnya kita tidak melakukan perubahan struktur database (seperti menambahkan tabel baru, ataupun field baru dari suatu tabel, hanya menambahkan record baru saja) maka kita tidak perlu melakukan backup skema berkali-kali. Kita hanya perlu melakukan backup rutin untuk data-nya saja untuk keperluan keamanan. Merestore Database 23 Januari :38 Kita melakukan restore database hanya pada daat kita memindahkan tabel database lokal ke remote. Atau pada saat kita sudah memiliki contoh skema database yang sudah dibuat terlebih dahulu pada komputer lain dan ingin kita implementasikan pada kompter yang kita gunakan. Kita akan mencoba merestore dengan menggunakan aplikasi PgAdmin3, untuk restore di server BPS tergantung dari aplikasi yang di support oleh database server di sana. Setelah kita membuka aplikasi dan masuk sebagai salah satu usernya, selanjutnya kita klik pada nama database yang ingin kita restore. Bila database-nya belum ada, maka harus kita buat dulu. Setelah itu kita klik pada icon SQL dengan gambar kaca pembesar. 40</p><p><span>44</span> Setelah itu akan muncul window query, klik icon open (bergambar folder) lalu pilih file backup yang skema terlebih dahulu (bila database masih kosong). Lalu klik icon run (bergambar segitiga berbentuk tanda panah ke arah kanan berwarna hijau). Setelah skema berhasil terbentuk, kita kan mengulangi cara yang sama untuk me-restore data-nya. Koneksi database melalui PHP 23 Januari :25 Pada Yii framework, koneksi database melalui PHP dilakukan melalui perintah 'db'=>array( 'connectionstring' => 'mysql:host=localhost;dbname=testdrive', 'emulateprepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', ), Perintah ini ada pada file main.php pada folder website: "/pringsewu/protected/config" Baris perintah ini kita ganti menjadi: 'db'=>array( 'connectionstring' => 'pgsql:host=localhost;port=5432;dbname=pringsewukabdb', 'emulateprepare' => true, 'username' => 'postgres', 'password' => 'password', 'charset' => 'utf8', ), Perintah kueri pada database dapat kita lihat contohnya misalnya pada class Menu berikut ini: public function RetrieveMenu($kategori='1', $lang='idn') { $sql = "select id, menu_$lang as menu, aksi, alt_$lang as alt, id_parent, have_child from menu where id_menu_kategori=$kategori and flag=1 order by id asc"; 41</p><h3 id="apa-kegunaan-postgresql">Apa kegunaan PostgreSQL?</h3><p><span>PostgreSQL</span> adalah sebuah sistem basis data yang disebarluaskan secara bebas menurut Perjanjian lisensi BSD. Peranti lunak ini merupakan salah satu basis data yang paling banyak digunakan saat ini, selain MySQL dan Oracle. <span>PostgreSQL</span> menyediakan fitur yang berguna untuk replikasi basis data.</p><h3 id="kenapa-harus-postgresql">Kenapa harus PostgreSQL?</h3><p>Aman dan Gratis Digunakan. Keuntungan pertama dari <span>PostgreSQL</span> adalah aman serta gratis digunakan. Mengingat <span>PostgreSQL</span> adalah sistem berbasis open-source, maka Anda tidak memerlukan lisensi khusus, berlangganan mode premium, atau mempelajari penggunaannya pada versi demo atau trial.</p><h3 id="bahasa-apa-saja-yang-bisa-digunakan-untuk-membuat-fungsi-pada-postgresql">Bahasa apa saja yang bisa digunakan untuk membuat fungsi pada PostgreSQL?</h3><p><span>PostgreSQL adalah sistem manajemen database relasional (RDBMS) yang bersifat open source.</span>.</p><p>Delphi..</p><p>JavaScript (Node.js).</p><h3 id="apa-perbedaan-mysql-dan-postgresql">Apa perbedaan MySQL dan PostgreSQL?</h3><p><span>Perbedaan</span> Inti dari <span>Postgres</span> vs <span>MySQL</span> <span>Postgres</span> adalah database relasional objek (ORDBMS) dengan fitur-fitur seperti pewarisan tabel dan kelebihan beban fungsi, sedangkan <span>MySQL</span> adalah database relasional murni (RDBMS).</p><h3 id="apa-kegunaan-postgresql">Apa kegunaan PostgreSQL?</h3><p><span>PostgreSQL</span> adalah sebuah sistem basis data yang disebarluaskan secara bebas menurut Perjanjian lisensi BSD. Peranti lunak ini merupakan salah satu basis data yang paling banyak digunakan saat ini, selain MySQL dan Oracle. <span>PostgreSQL</span> menyediakan fitur yang berguna untuk replikasi basis data.</p><h3 id="kenapa-harus-postgresql">Kenapa harus PostgreSQL?</h3><p>Aman dan Gratis Digunakan. Keuntungan pertama dari <span>PostgreSQL</span> adalah aman serta gratis digunakan. Mengingat <span>PostgreSQL</span> adalah sistem berbasis open-source, maka Anda tidak memerlukan lisensi khusus, berlangganan mode premium, atau mempelajari penggunaannya pada versi demo atau trial.</p><h3 id="apakah-postgre-gratis">Apakah Postgre gratis?</h3><p><span>PostgreSQL</span> adalah database relasional open source yang bisa digunakan secara <span>gratis</span>. Database <span>PostgreSQL</span> menyediakan fitur-fitur untuk memudahkan Anda mengelola data yang tersimpan.</p> </p><div class='paramage'></div> <div class="contenBreak"></div> <h3 id="apa-itu-psql">Apa itu psql?</h3> <div class="blockAnswer_acceptedAnswer"><span class="FCUp0c rQMQod">PostgreSQL</span> adalah sebuah sistem basis data yang disebarluaskan secara bebas menurut Perjanjian lisensi BSD. Peranti lunak ini merupakan salah satu basis data yang paling banyak digunakan saat ini, selain MySQL dan Oracle. <span class="FCUp0c rQMQod">PostgreSQL</span> menyediakan fitur yang berguna untuk replikasi basis data.</div> <h3 id="apa-kelebihan-postgresql">Apa kelebihan PostgreSQL?</h3> <div class="blockAnswer_acceptedAnswer"><div class='ListData'><span class="FCUp0c rQMQod">Berikut ini adalah kelebihan PostgreSQL:</span>.</div> <div class='ListData'>Support data JSON;.</div> <div class='ListData'>Support framework website modern seperti Node.js dan Django;.</div> <div class='ListData'>Dirilis dengan lisensi PostgreSQL sendiri;.</div> <div class='ListData'>Bersifat open source dan gratis;.</div> <div class='ListData'>Skala besar, mampu memuat hingga ribuan transaksi data;.</div> <div class='ListData'>Memiliki banyak fitur yang mumpuni;.</div> </div> <h3 id="apakah-postgre-gratis">Apakah Postgre gratis?</h3> <div class="blockAnswer_acceptedAnswer"><span class="FCUp0c rQMQod">PostgreSQL</span> adalah database relasional open source yang bisa digunakan secara <span class="FCUp0c rQMQod">gratis</span>. Database <span class="FCUp0c rQMQod">PostgreSQL</span> menyediakan fitur-fitur untuk memudahkan Anda mengelola data yang tersimpan.</div> </p></div> <div class="readmore_content_exists"><button id="readmore_content"><span class="arrow"><span></span></span>Đọc tiếp</button></div> </td></tr></table> <script async src="/dist/js/lazyhtml.min.js" crossorigin="anonymous"></script> <div class="lazyhtml" data-lazyhtml> <script type="text/lazyhtml"> <div class="youtubeVideo"><h3>Video liên quan</h3> <iframe width="560" height="315" src="https://www.youtube.com/embed/0Or98GX3P7k?controls=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"allowfullscreen></iframe> </div> </script> </div> <div class="mt-3"> <div class="tags"> <a href="https://lovelyristin.com/tags/kode" class="tag-link">kode</a> <a href="https://lovelyristin.com/tags/php" class="tag-link">php</a> <a href="https://lovelyristin.com/tags/Apa itu psql?" class="tag-link">Apa itu psql?</a> <a href="https://lovelyristin.com/tags/Apa kelebihan PostgreSQL?" class="tag-link">Apa kelebihan PostgreSQL?</a> <a href="https://lovelyristin.com/tags/Apakah Postgre gratis?" class="tag-link">Apakah Postgre gratis?</a> <a href="https://lovelyristin.com/tags/PostgreSQL vs MySQL" class="tag-link">PostgreSQL vs MySQL</a> <a href="https://lovelyristin.com/tags/Download PostgreSQL" class="tag-link">Download PostgreSQL</a> <a href="https://lovelyristin.com/tags/Download PostgreSQL Windows" class="tag-link">Download PostgreSQL Windows</a> </div> </div> <div class="post-tools"> <button data-postid="penggunaan-fungsi-psql-pada-php" class="btn btn-answerModalBox"><img class="mr-1" alt="Penggunaan fungsi PSQL pada PHP" src="/dist/images/svg/messages_16.svg">Reply</button> <button data-postid="penggunaan-fungsi-psql-pada-php" data-vote="up" class="btn btn-doVote"><img class="mr-1" alt="Penggunaan fungsi PSQL pada PHP" src="/dist/images/svg/face-smile_16.svg">5</button> <button data-postid="penggunaan-fungsi-psql-pada-php" data-vote="down" class="btn btn-doVote"><img class="mr-1" alt="Penggunaan fungsi PSQL pada PHP" src="/dist/images/svg/poo_16.svg">0</button> <button class="btn"><img class="mr-1" alt="Penggunaan fungsi PSQL pada PHP" src="/dist/images/svg/facebook_16.svg"> Chia sẻ</button> </div> </div><!-- end question-post-body --> </div><!-- end question-post-body-wrap --> </div><!-- end question --> <div id="answers_penggunaan-fungsi-psql-pada-php" class="answers"> </div><!-- end answer-wrap --> <div class="entryFooter"> <div class="footerLinkAds"></div> <div class="footerRelated"><div class="postRelatedWidget"> <h2>Bài Viết Liên Quan</h2> <div class="questions-snippet layoutNews border-top border-top-gray"> <div class="max-width:840px"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fb-44+c1-1p-ns" data-ad-client="ca-pub-4987931798153631" data-ad-slot="7655066491"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-save-image-temporary-python"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-save-image-temporary-python---97e9e331fb733b17e258042cee1da276.webp" alt="Cara menggunakan save image temporary python"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-save-image-temporary-python">Cara menggunakan save image temporary python</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/python" class="tag-link">python</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/ekstensi-kode-studio-visual-html-css"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_ekstensi-kode-studio-visual-html-css---4504b9c86e510924348c86f384d9f5b6.webp" alt="Ekstensi kode studio visual html css"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/ekstensi-kode-studio-visual-html-css">Ekstensi kode studio visual html css</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/html" class="tag-link">html</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/https-notfound-php"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_https-notfound-php---ac8a05b2180c7bf6bc91070e194a2c72.webp" alt="Https notfound PHP"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/https-notfound-php">Https notfound PHP</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-integer-to-date-python"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-integer-to-date-python---069902985eee2d1e54ad51c6f9361b3e.webp" alt="Cara menggunakan integer to date python"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-integer-to-date-python">Cara menggunakan integer to date python</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/python" class="tag-link">python</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/python-mengganti-karakter-dalam-file-teks"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_python-mengganti-karakter-dalam-file-teks---3ba7897bb176e8a6616e0eca5a02805f.webp" alt="Python mengganti karakter dalam file teks"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/python-mengganti-karakter-dalam-file-teks">Python mengganti karakter dalam file teks</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/python" class="tag-link">python</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-mengecek-nomor-npwp-yang-hilang"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-mengecek-nomor-npwp-yang-hilang---07291dd6fb1faec4233a811a3449c0ab.webp" alt="Cara mengecek nomor npwp yang hilang"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-mengecek-nomor-npwp-yang-hilang">Cara mengecek nomor npwp yang hilang</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/bagaimana-anda-membuat-diagram-di-mysql"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_bagaimana-anda-membuat-diagram-di-mysql---5b69c5fb90ffb8fe428d9196d13f49d1.webp" alt="Bagaimana Anda membuat diagram di mysql?"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/bagaimana-anda-membuat-diagram-di-mysql">Bagaimana Anda membuat diagram di mysql?</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/mysql" class="tag-link">mysql</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-contoh-perulangan-while-php"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-contoh-perulangan-while-php---38636c5c615e076e722429be06ff6296.webp" alt="Cara menggunakan contoh perulangan while php"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-contoh-perulangan-while-php">Cara menggunakan contoh perulangan while php</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/php" class="tag-link">php</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/marksheet-code-in-javascript"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_marksheet-code-in-javascript---a3d7aca0ada3292597fd1017021c636d.webp" alt="Marksheet code in JavaScript"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/marksheet-code-in-javascript">Marksheet code in JavaScript</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-perintah-dasar-python"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-perintah-dasar-python---66b7b359890b165b68a5a0efdae62ec4.webp" alt="Cara menggunakan perintah dasar python"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-perintah-dasar-python">Cara menggunakan perintah dasar python</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/python" class="tag-link">python</a> </div> </div> </div> </div><!-- end media --> <div class="max-width:840px"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fb-44+c1-1p-ns" data-ad-client="ca-pub-4987931798153631" data-ad-slot="7655066491"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-baris-ungroup-di-excel"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-baris-ungroup-di-excel---b10aaedb2e3b7350208f6c72a1b03b50.webp" alt="Cara menggunakan baris ungroup di excel"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-baris-ungroup-di-excel">Cara menggunakan baris ungroup di excel</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/excel" class="tag-link">excel</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/apakah-bisa-transfer-dari-ovo-ke-gopay"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_apakah-bisa-transfer-dari-ovo-ke-gopay---b1260b1dd26e08454f5588419c9add89.webp" alt="Apakah bisa transfer dari OVO ke GoPay?"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/apakah-bisa-transfer-dari-ovo-ke-gopay">Apakah bisa transfer dari OVO ke GoPay?</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menghapus-squarespace-javascript-yang-tidak-terpakai"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menghapus-squarespace-javascript-yang-tidak-terpakai---11331bcb2d1afc447d7b9a7c619007a0.webp" alt="Cara menghapus squarespace javascript yang tidak terpakai"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menghapus-squarespace-javascript-yang-tidak-terpakai">Cara menghapus squarespace javascript yang tidak terpakai</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/javascript" class="tag-link">javascript</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/bagaimana-anda-mengarahkan-ke-halaman-lain-di-html-setelah-mengirimkan"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_bagaimana-anda-mengarahkan-ke-halaman-lain-di-html-setelah-mengirimkan---ca36615c05b9f7cc959585b36a3e2aa8.webp" alt="Bagaimana Anda mengarahkan ke halaman lain di html setelah mengirimkan?"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/bagaimana-anda-mengarahkan-ke-halaman-lain-di-html-setelah-mengirimkan">Bagaimana Anda mengarahkan ke halaman lain di html setelah mengirimkan?</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/html" class="tag-link">html</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/scrape-website-to-excel"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_scrape-website-to-excel---6ca4b4f38457e2688ec3ebde50891646.webp" alt="Scrape website to Excel"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/scrape-website-to-excel">Scrape website to Excel</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-php-maxinputvars-not-updating"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-php-max_input_vars-not-updating---5c19b1213c5ffcd1f97bab464f067680.webp" alt="Cara menggunakan php max_input_vars not updating"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-php-maxinputvars-not-updating">Cara menggunakan php max_input_vars not updating</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/php" class="tag-link">php</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-website-forum-php"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-website-forum-php---1f5e1239a9b21bcd6d64a354ffc344bd.webp" alt="Cara menggunakan website forum php"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-website-forum-php">Cara menggunakan website forum php</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/php" class="tag-link">php</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-aktivasi-kartu-brizzi-di-atm-bri"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-aktivasi-kartu-brizzi-di-atm-bri---dc26841f105c17ee6faeab0662d4f2a2.webp" alt="Cara aktivasi kartu BRIZZI di ATM BRI"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-aktivasi-kartu-brizzi-di-atm-bri">Cara aktivasi kartu BRIZZI di ATM BRI</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-const-javascript-adalah"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-const-javascript-adalah---93ab1a45eb6e7b220ec56ea0d0f86fc1.webp" alt="Cara menggunakan const javascript adalah"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-const-javascript-adalah">Cara menggunakan const javascript adalah</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/javascript" class="tag-link">javascript</a> </div> </div> </div> </div><!-- end media --> <div class="media media-card rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray"> <div class="media-image"> <a href="/cara-menggunakan-mysql-aplikasi-apa"><img src="/dist/images/waiting.svg" width="200px" height="100px" data-orgimg="https://ap.cdnki.com/r_cara-menggunakan-mysql-aplikasi-apa---ae26930fa88b62de5eae83b04685fe68.webp" alt="Cara menggunakan mysql aplikasi apa?"></a> </div> <div class="media-body"> <h5 class="mb-2 fw-medium"><a href="/cara-menggunakan-mysql-aplikasi-apa">Cara menggunakan mysql aplikasi apa?</a></h5> <p class="mb-2 truncate lh-20 fs-15"></p> <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0"> <div class="tags"> <a href="/tags/kode" class="tag-link">kode</a> <a href="/tags/mysql" class="tag-link">mysql</a> </div> </div> </div> </div><!-- end media --> </div> </div></div> </div> </div> </div><!-- end question-main-bar --> </div><!-- end col-lg-9 --> <div class="postContentRight"> <div class="sidebar"> <div class="card card-item"> <div class="card-body"> <h3 class="fs-17 pb-3">Có thể bạn quan tâm</h3> <div class="divider"><span></span></div> <div class="sidebar-questions pt-3"> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/google-sheets-difference-between-two-columns">Google Sheets difference between two columns</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/RepublicanNetworking" class="author">RepublicanNetworking</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-mengunduh-kamus-dengan-python">Cara mengunduh kamus dengan python</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/ChunkySending" class="author">ChunkySending</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/apa-perbedaan-list-dan-array-pada-python">Apa perbedaan list dan array pada python?</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/DisastrousMaple" class="author">DisastrousMaple</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/how-do-i-push-data-from-one-excel-workbook-to-another">How do I push data from one Excel workbook to another?</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/SorrowfulCountryman" class="author">SorrowfulCountryman</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-menggunakan-raise-vs-return-python">Cara menggunakan raise vs return python</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/SatisfyingInstruction" class="author">SatisfyingInstruction</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-konfigurasi-mysql-di-xampp">Cara konfigurasi mysql di xampp</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/BindingMortality" class="author">BindingMortality</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/spreadsheet-odoo">Spreadsheet odoo</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/LastingMahogany" class="author">LastingMahogany</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-mengubah-server-phpmyadmin">Cara mengubah server phpmyadmin</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/HandmadeWaitress" class="author">HandmadeWaitress</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-membuat-paragraf-di-css">Cara membuat paragraf di css</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/IndeterminateIndicator" class="author">IndeterminateIndicator</a> </small> </div> </div><!-- end media --> <div class="media media-card media--card media--card-2"> <div class="media-body"> <h5><a href="https://lovelyristin.com/cara-menggunakan-perbedaan-laravel-dan-php">Cara menggunakan perbedaan laravel dan php</a></h5> <small class="meta"> <span class="pr-1">1 năm trước</span> <span class="pr-1">. bởi</span> <a href="https://lovelyristin.com/author/TeemingAesthetics" class="author">TeemingAesthetics</a> </small> </div> </div><!-- end media --> </div><!-- end sidebar-questions --> </div> </div><!-- end card --> <div class="card card-item"> <div class="card-body"> <h3 class="fs-17 pb-3">Xem Nhiều</h3> <div class="divider"><span></span></div> <div class="sidebar-questions pt-3"> </div><!-- end sidebar-questions --> </div> </div><!-- end card --> </div><!-- end sidebar --> </div><!-- end col-lg-3 --> </div><!-- end row --> </div><!-- end container --> </section><!-- end question-area --> <!-- ================================ END QUESTION AREA ================================= --> <script>var questionId ='penggunaan-fungsi-psql-pada-php'</script> <script>var postTime ='2022-09-11T21:46:36.858Z'</script> <script>var siteDomain ='lovelyristin.com'</script> <script type="text/javascript" src="https://lovelyristin.com/dist/js/pages/comment.js"></script> <!-- ================================ END FOOTER AREA ================================= --> <section class="footer-area pt-80px bg-dark position-relative"> <span class="vertical-bar-shape vertical-bar-shape-1"></span> <span class="vertical-bar-shape vertical-bar-shape-2"></span> <span class="vertical-bar-shape vertical-bar-shape-3"></span> <span class="vertical-bar-shape vertical-bar-shape-4"></span> <div class="container"> <div class="row"> <div class="col-lg-3 responsive-column-half"> <div class="footer-item"> <h3 class="fs-18 fw-bold pb-2 text-white">Chúng tôi</h3> <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white"> <li><a href="/about.html">Giới thiệu</a></li> <li><a href="/contact.html">Liên hệ</a></li> <li><a href="/contact.html">Tuyển dụng</a></li> <li><a href="/contact.html">Quảng cáo</a></li> </ul> </div><!-- end footer-item --> </div><!-- end col-lg-3 --> <div class="col-lg-3 responsive-column-half"> <div class="footer-item"> <h3 class="fs-18 fw-bold pb-2 text-white">Điều khoản</h3> <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white"> <li><a href="/privacy-statement.html">Điều khoản hoạt động</a></li> <li><a href="/terms-and-conditions.html">Điều kiện tham gia</a></li> <li><a href="/privacy-statement.html">Quy định cookie</a></li> </ul> </div><!-- end footer-item --> </div><!-- end col-lg-3 --> <div class="col-lg-3 responsive-column-half"> <div class="footer-item"> <h3 class="fs-18 fw-bold pb-2 text-white">Trợ giúp</h3> <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white"> <li><a href="/contact.html">Hướng dẫn</a></li> <li><a href="/contact.html">Loại bỏ câu hỏi</a></li> <li><a href="/contact.html">Liên hệ</a></li> </ul> </div><!-- end footer-item --> </div><!-- end col-lg-3 --> <div class="col-lg-3 responsive-column-half"> <div class="footer-item"> <h3 class="fs-18 fw-bold pb-2 text-white">Mạng xã hội</h3> <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white"> <li><a href="#"><i class="fab fa-facebook-f mr-1"></i> Facebook</a></li> <li><a href="#"><i class="fab fa-twitter mr-1"></i> Twitter</a></li> <li><a href="#"><i class="fab fa-linkedin mr-1"></i> LinkedIn</a></li> <li><a href="#"><i class="fab fa-instagram mr-1"></i> Instagram</a></li> </ul> </div><!-- end footer-item --> </div><!-- end col-lg-3 --> </div><!-- end row --> </div><!-- end container --> <hr class="border-top-gray my-5"> <div class="container"> <div class="row align-items-center pb-4 copyright-wrap"> <div class="col-6"> <a href="//www.dmca.com/Protection/Status.aspx?ID=33e5dca6-f8c5-4c6f-b8e6-a247229d2953" title="DMCA.com Protection Status" class="dmca-badge"> <img src ="https://images.dmca.com/Badges/dmca_protected_sml_120am.png?ID=33e5dca6-f8c5-4c6f-b8e6-a247229d2953" width="123px" height="21px" alt="DMCA.com Protection Status" /></a> <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script> </div> <!-- end col-lg-6 --><div class="col-6"> <div class="copyright-desc text-right fs-14"> <div>Bản quyền © 2021 <a href="https://lovelyristin.com"></a> Inc.</div> </div> </div><!-- end col-lg-6 --> </div><!-- end row --> </div><!-- end container --> </section><!-- end footer-area --> <!-- ================================ END FOOTER AREA ================================= --><script> $( document ).ready(function() { setTimeout(showMoreButton, 3000); function showMoreButton(){ let minheight = 1000; minheight = parseInt($("#entryContent").innerHeight())/3; $("#entryContent").css('min-height', minheight).css('max-height', minheight).css('overflow', 'hidden'); $("#readmore_content").click(function(){ $("#entryContent").css('min-height', '').css('max-height', '').css('overflow', ''); $(".readmore_content_exists").css('display', 'none'); }) } }); </script> <!-- template js files --> <!-- start back to top --> <div id="back-to-top" data-toggle="tooltip" data-placement="top" title="Lên đầu trang"> <img alt="" src="/dist/images/svg/arrow-up_20.svg"> </div> <!-- end back to top --> <script src="https://lovelyristin.com/dist/js/bootstrap.bundle.min.js"></script> <script src="https://lovelyristin.com/dist/js/moment.js"></script> <script src="https://lovelyristin.com/dist/js/read-more.min.js"></script> <script src="https://lovelyristin.com/dist/js/main.js?v=6"></script> <!-- Google Tag Manager (noscript) --> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jxuz46z39u"); </script> </body> </html> <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="7d1e7ccd28de087f6761d722-|49" defer></script>