CodeIgniter: Penulisan Multi Koneksi

Multi koneksi adalah koneksi lebih dari satu yang dapat berjalan di Framework CodeIgniter. Penulisannya sama seperti penulisan ‘default’ namun memakai nama berbeda

$db['test'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => TRUE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'compress' => FALSE,
        'encrypt' => FALSE,
        'stricton' => FALSE,
        'failover' => array()
);

atau

$db['test'] = $db['test'];
$db['test']['hostname'] = 'localhost';
$db['test']['username'] = 'username';
$db['test']['database'] = 'db name';
$db['test']['password'] = 'password';

Penggunaan Multi Koneksi ini dapat dimanfaatkan apabila CI memiliki lebih dari 1 database yang akan digunakan. Atau memiliki 2 logika koneksi yang berbeda-beda. Dimana logika pertama memiliki prefix dan lainnya tidak memakai prefix

Koneksi Utama

koneksi utama yang digunakan adalah default. Apabila ingin menggantikan dengan lain seperti “test” dapat menggunakan
$active_group = 'test';

Dalam program yang baik, disarankan memakai prefix dalam configurasinya. Tetapi sejalan dengan proses yang sering terjadi bentrok penamaan table. Disarankan memiliki 2 tipe koneksi database yaitu tanpa prefix dan dengan prefix. Hal ini dikarenakan adanya problem dalam penulisan nama saat menjalankan join.

Advertisements

CodeIgniter: Penulisan Koneksi Gagal

Apabila terjadi masalah koneksi pada koneksi utama (default). Parameter Failover dapat digunakan . Setting untuk menjalankan seperti penulisan berikut

$db['default']['failover'] = array(
                array(
                        'hostname' => 'localhost1',
                        'username' => '',
                        'password' => '',
                        'database' => '',
                        'dbdriver' => 'mysqli',
                        'dbprefix' => '',
                        'pconnect' => TRUE,
                        'db_debug' => TRUE,
                        'cache_on' => FALSE,
                        'cachedir' => '',
                        'char_set' => 'utf8',
                        'dbcollat' => 'utf8_general_ci',
                        'swap_pre' => '',
                        'encrypt' => FALSE,
                        'compress' => FALSE,
                        'stricton' => FALSE
                ),
                array(
                        'hostname' => 'localhost2',
                        'username' => '',
                        'password' => '',
                        'database' => '',
                        'dbdriver' => 'mysqli',
                        'dbprefix' => '',
                        'pconnect' => TRUE,
                        'db_debug' => TRUE,
                        'cache_on' => FALSE,
                        'cachedir' => '',
                        'char_set' => 'utf8',
                        'dbcollat' => 'utf8_general_ci',
                        'swap_pre' => '',
                        'encrypt' => FALSE,
                        'compress' => FALSE,
                        'stricton' => FALSE
                )
        );
penulisan koneksi dapat digunakan untuk konfigurasi lainnya.

CodeIgniter: Penulisan Dsn

Untuk Beberapa penulisan koneksi tertentu ( PDO, PostgreSQL, Oracle, ODBC), dimana diperlukan DSN. Maka penulisan DSN adalah sebagai berikut

  1. ODBC
    odbc:testdb
    odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=SAMPLE;PROTOCOL=TCPIP;UID=db2inst1;PWD=ibmdb2;
    odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\db.mdb;Uid=Admin
  2. PostgreSQL
    pgsql:host=localhost;port=5432;dbname=database_name
  3. Mysqli
    mysql:dbname=testdb;host=127.0.0.1

    mysql:host=localhost;dbname=testdb


    mysql:host=localhost;port=3307;dbname=testdb


    mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

    Pada PHP 5.3.6, charset tidak akan digunakan
  4. CUBRID
    cubrid:dbname=demodb;host=localhost;port=33000
  5. FIREBIRD
    firebird:dbname=/path/to/DATABASE.FDB

    firebird:dbname=hostname/port:/path/to/DATABASE.FDB
    firebird:dbname=localhost:/var/lib/firebird/2.5/data/employee.fdb
  6. MSSQL.
    mssql:host=localhost;dbname=testdb
    sybase:host=localhost;dbname=testdb
    dblib:host=localhost;dbname=testdb

    memanfaatkan ODBC sangat disarankan
  7. IBM DB2

    ibm:DSN=DB2_9


    DRIVER={IBM DB2 ODBC DRIVER};DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password;


    ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb; HOSTNAME=11.22.33.444;PORT=56789;PROTOCOL=TCPIP;
  8. Informix

    informix:DSN=Infdrv33


    informix:host=host.domain.com; service=9800;
    database=common_db; server=ids_server; protocol=onsoctcp;
    EnableScrollableCursors=1
  9. Oracle
    oci:dbname=mydb
    oci:dbname=//localhost:1521/mydb
  10. SQLite

    sqlite:/opt/databases/mydb.sq3

    sqlite::memory:

    sqlite2:/opt/databases/mydb.sq2

    sqlite2::memory:

Apabila parameter yang digunakan kurang, CodeIgniter akan melengkapi dalam menjalankan perintah PDO.

Silakan memeriksa pada dokumentasi PHP untuk memastikan formatnya

Sumber: Dokumentasi PHP

CodeIgniter: penulisan config database

Konfigurasi database yang dapat digunakan untuk Codeigniter. Semua konfigurasi ini dapat ditulis di config/database.php

Konfigurasi ditulis dalam bentuk array

$db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => TRUE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array()
);

Untuk Beberapa penulisan koneksi tertentu ( PDO, PostgreSQL, Oracle, ODBC), dimana diperlukan DSN. Maka penulisan DSNnya dapat dimasukkan kedalam parameter DSN seperti contoh berikut

// PDO
$db['default']['dsn'] = 'pgsql:host=localhost;port=5432;dbname=database_name';

// Oracle
$db['default']['dsn'] = '//localhost/XE';

sehingga konfigurasinya

$db['default'] = array(
        'dsn'   => = 'pgsql:host=localhost;port=5432;dbname=database_name',
        'hostname' => '',
        'username' => '',
        'password' => '',
        'database' => '',
        'dbdriver' => '',
        'dbprefix' => '',
        'pconnect' => TRUE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array()
);
mengisi kemungkinan akan membuat parameter lainnya tidak dibaca

Query Builder

Secara default, Query builder dalam keadaan TRUE. Namun apabila tidak menginginkan penggunaan Query Builder dalam projek, dapat dimatikan dengan memasukkan parameter FALSE

$query_builder = TRUE;

CodeIgniter: Penamaan Field dan Table

Tidak ada Penulisan baku untuk penamaan table maupun field. Terutama untuk menentukan tipe field dari field. Dalam memberikan nama table atau field, disarankan

  • Jelas
  • memakai Format yang sama. contoh: penulisan field pertama nama_lengkap. penulisan field kedua malah tanggallahir
  • memakai bahas yang sama. Apabila kesulitan, memadukan disarankan
  • pendek atau disingkat
  • memakai prefix. bersifat Optional

Prefix

Tujuan memakai Prefix adalah untuk membedakan table-table bernama sama. Apabila dalam 1 database terdapat 2-lebih projek. Biasanya ini berkaitan dengan projek ERP yang meletakkan database pada tempat yang sama (DBMS dan tidak pada database berbeda).

Dengan memakai prefix, dapat diketahui sumber aplikasi/projek yang menggunakan. Ada banyak alasan yang lain, tetapi utamakan pada penggunaan yang dapat mudah terbaca para programer yang menggunakan.

CodeIgniter: Fungsi pendukung Query Builder

Untuk penulisan terbaik adalah memanfaatkan query builder yang tersedia di CodeIgniter. Pemanfaatan Query Builder dapat mengurangi kerumitan penulisan coding kedepannya. Untuk dukungan atas penulisan query, terutama untuk proses debuging ada beberapa fungsi pendukung yang sangat membantu.

Field yang terpengaruh

dalam proses insert dan nantinya Update, akan ada field/data yang akan terpengaruh. Untuk mengetahui jumlah yang terpengaruh. Dapat menggunakan
$this->db->affected_rows();

letakkan setelah proses query insert, update dan delete berjalan.

Error

apabila menginginkan proses error dapat terlihat. manfaatkan perintah
$this->db->error();

letakkan dibawah proses query. Pastikan proses query berjalan salah. Dan perintah ini akan mengeluarkan error yang terjadi

 

pastikan debug error dalam keadaan mati dalam configurasi. Bila tidak, error akan keluar tanpa kecuali

CodeIgniter: Menggunakan Query Builder (insert)

Untuk melakukan insert dapat menggunakan query
$sql = "INSERT INTO mytable (title, name) VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";

penulisan ini akan menyulitkan ketika field yang akan dimasukkan banyak

Dengan memanfaatkan query builder, penulisan dapat dipersingkat sebagai berikut

$data = array(
        'title' => $title,
        'name' => $name
);
$this->db->insert('mytable', $data);
penulisan query yang berjalan sama seperti query insert di atas. Penambahan kutip akan automatis diberikan

proses insert dapat mengembalikan nilai id yang dimasukkan.
$this->db->insert_id();

tidak semua DBMS mendukung fitur ini.
ID yang dikembalikan hanya apabila terdapat field bertipe integer Key Primary dengan kemampuan Autoincrement

Penulisan Query Yang berjalan

untuk melihat query insert yang akan dijalankan dapat memanfaatkan
$this->db->insert_string();

penggunaannya sama seperti insert()

untuk melilhat query yang dijalankan dapat memanfaatkan
$this->db->last_query();

akan mengeluarkan query yang terakhir dijalankan.