Cara menggunakan php bind param select

Pernyataan prepare adalah fitur yang digunakan untuk menjalankan pernyataan SQL yang sama (atau serupa) berulang kali dengan efisiensi tinggi.

Pernyataan prepare pada dasarnya bekerja seperti ini:

  1. Prepare: Template pernyataan SQL dibuat dan dikirim ke database. Nilai tertentu dibiarkan tidak ditentukan, disebut parameter (berlabel “?”). Contoh: INSERT INTO MyGuests VALUES (?,?,?)
  2. Database mem-parsing, mengompilasi dan melakukan pengoptimalan kueri pada template pernyataan SQL, dan menyimpan hasilnya tanpa menjalankannya
  3. Exsekusi: Di lain waktu, aplikasi mengikat nilai ke parameter dan database menjalankan pernyataan tersebut. Aplikasi dapat mengeksekusi pernyataan tersebut sebanyak yang diinginkannya dengan nilai yang berbeda

Dibandingkan dengan menjalankan pernyataan SQL secara langsung, pernyataan prepare memiliki tiga keunggulan utama:

  • Pernyataan statement mengurangi waktu penguraian karena persiapan pada kueri dilakukan hanya sekali (meskipun pernyataan tersebut dijalankan beberapa kali)
  • Parameter bound meminimalkan bandwidth ke server karena kita hanya perlu mengirim parameter setiap kali dan bukan seluruh kueri
  • Pernyataan yang disiapkan sangat berguna terhadap injeksi SQL, karena nilai parameter, yang dikirim nanti menggunakan protokol yang berbeda, tidak perlu di-escape dengan benar. Jika template pernyataan asli tidak berasal dari input eksternal, injeksi SQL tidak dapat terjadi.

Pernyataan Prepare di MySQLi

Contoh berikut menggunakan pernyataan prepare dan parameter bound di MySQLi:

Contoh (MySQLi dengan Pernyataan Disiapkan):

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Buat Koneksi
$conn = new mysqli($servername, $username, $password, $dbname);

// Periksa Koneksi
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// persiapkan dan ikat
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// atur parameter dan eksekusi
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

Baris kode yang akan dijelaskan dari contoh di atas:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

Dalam SQL kita memasukkan tanda tanya (?) Di mana kita ingin mengganti nilai integer, string, double atau blob.

Kemudian, lihat fungsi bind_param ():

$stmt->bind_param("sss", $firstname, $lastname, $email);

Fungsi ini mengikat parameter ke kueri SQL dan memberi tahu database apa saja parameternya. Argumen “sss” mencantumkan jenis data yang menjadi parameternya. Karakter s memberitahu mysql bahwa parameternya adalah string.

Argumennya mungkin salah satu dari empat jenis di bawah ini:

  • i – integer
  • d – ganda
  • s – string
  • b – BLOB

Kita harus memiliki salah satunya untuk setiap parameter.

Dengan memberi tahu mysql jenis data apa yang diharapkan, kita bisa meminimalkan risiko injeksi SQL.

Catatan: Jika kita ingin memasukkan data apa pun dari sumber eksternal (seperti input pengguna), sangat penting jika data dibersihkan dan divalidasi.

Yii Query Builder menyediakan cara berorientasi objek dalam menulis statement SQL. Fitur ini membantu pengembang untuk menggunakan property dan method kelas untuk menentukan bagian-bagian dari statement SQL yang kemudian menggabungkannya menjasi sebuah statement SQL yang valid yang bisa dieksekusi lebih lanjut oleh method DAO seperti yang dideskripsikan di Data Access Objects. Berikut akan ditampilkan penggunaan umum dari Query Builder untuk membangun sebuah statement SQL SELECT:

$user = Yii::app()->db->createCommand()
    ->select('id, username, profile')
    ->from('tbl_user u')
    ->join('tbl_profile p', 'u.id=p.user_id')
    ->where('id=:id', array(':id'=>$id))
    ->queryRow();

Query Builder sangat cocok digunakan ketika Anda memerlukan menggabungkan sebuah statement SQL secara prosedural, atau berdasarkan suatu kondisi logis dalam aplikasi Anda. Manfaat utama dalam menggunakan Query Builder termasuk:

  • Memungkinkan membangun statement SQL yang kompleks secara programatik

  • Fitur ini akan memberikan quote pada nama table dan kolom secara otomatis guna mencegah konflik dengan tulisan SQL ataupun karakter khusus.

  • Fitur ini juga memberikan quote pada nilai parameter dan melakukan binding pada parameter ketika memungkinkan, sehingga mengurangi resiko terserang SQL injection.

  • Fitur ini menyediakan sekian tingkatan abstraksi pada DB, yang menyederhanakan migrasi ke platform DB yang berbeda.

Menggunakan Query Builder bukanlah sebuah keharusan. Bahkan, jika query Anda cukup sederhana, akan leih gampang dan cepat menulis SQL-nya langsung.

Catatan: Query builder tidak bisa digunakan untuk memodifikasi query yang sudah ada sebagai statement SQL. Misalnya, code berikut tidak akan berjalan:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));

Oleh karena itu, jangan campur penggunaan SQL biasa dengan query builder.

1. Mempersiapkan Query Builder

Query Builder Yii disediakan oleh CDbCommand, kelas query DB utama di Data Access Objects.

Untuk menggunakan Query Builder, kita membuat sebuah instance baru dari CDbCommand dengan cara berikut,

$command = Yii::app()->db->createCommand();

Begitulah, kita menggunakan

function selectDistinct($columns)
6 untuk mendapatkan koneksi DB, kemudian melakukan pemanggilanpada untuk membuat instance command yang diperlukan.

Perhatikan bahwa alih-alih kita mem-pass semua statement SQL ke

function selectDistinct($columns)
7 seperti yang dilakukan di Data Access Objects, kita membiarkannya kosong. Ini dikarenakan kita akan membangun bagian-bagian individu dari statement SQL dengan menggunakan method Query Builder yang akan dijelaskan pada bagian berikut.

2. Membangung Query Penarik Data

Query penarik data merujuk pada statement SELECT pada SQL. Query builder menyediakan sekumpulan method untuk membangun bagian dari statement SELECT. DIkarenakan semua method ini mengembalikan instance CDbCommand, kita dapat memanggil mereka dengan menggunakan method chaining, seperti pada contoh di awal.

  • : menentukan bagian SELECT pada query
  • : menentukan bagian SELECT pada query serta mengaktifkan flag DISTINCT
  • : menentukan bagian FROM pada query
  • : menentukan bagian WHERE pada query
  • : menambah pecahan query inner join
  • : menambah pecahan left query left outer join
  • : menambah pecahan query right outer join
  • : menambah pecahan query cross join
  • : menambah pecahan query natural join
  • : menentukan bagian GROUP BY pada query
  • : menentukan bagian HAVING pada query
  • : menentukan bagian ORDER BY pada query
  • : menentukan bagian LIMIT pada query
  • : menentukan bagian OFFSET pada query
  • : menentukan bagian UNION pada query

Berikut, kami akan menunjukkan bagaimana menggunakan method-method query builder ini. Supaya sederhana, kami mengasumsi database yang digunakan adalah MySQL. Perhatikan bahwa jika Anda menggunakan DBMS yang lain, quote table/kolom/nilai akan berbeda dengan contoh.

select()

function select($columns='*')

Method menentukan bagian

function selectDistinct($columns)
8 pada query. Parameter
function selectDistinct($columns)
9 menentukan kolom-kolom apa saja yang akan di-select, yang bisa berupa string dengan nama kolom dipisah koma, atau sebuah array dari nama kolom. Nama kolom dapat berisi prefiks table dan/atau alias kolom. Method ini akan secara otomatis memberikan quote pada nama kolom kecuali kolom tersebut mengandung tanda kurung (yang bararti kolom yang diberikan merupakan ekspresi DB).

Berikut ini merupakan beberapa contoh:

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))

selectDistinct()

function selectDistinct($columns)

Method mirip dengan . Hanya saja mengaktifkan flag

SELECT DISTINCT `id`, `username`
0. Misalnya,
SELECT DISTINCT `id`, `username`
1id,username')` akan menghasilkan SQL berikut:

SELECT DISTINCT `id`, `username`

from()

Method menentukan bagian

SELECT DISTINCT `id`, `username`
2 pada query. Parameter
SELECT DISTINCT `id`, `username`
3 menentukan table mana yang akan di-select. Yang ini juga bisa berupa string dengan nama table dipisahkan dengan koma, atau sebuah array dari nama table. Nama table dapat diambil dari prefiks skema (misalnya
SELECT DISTINCT `id`, `username`
4) dan/atau alias table (misalnya
SELECT DISTINCT `id`, `username`
5). Method ini akan secara otomatis memberikan quote pada nama table kecuali nama table-nya mengandung huruf kurung (yang artinya berupa sub-query atau ekspresi DB).

Berikut merupakan beberapa contoh:

// FROM `tbl_user`
from('tbl_user')
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from('tbl_user u, public.tbl_profile p')
// FROM `tbl_user`, `tbl_profile`
from(array('tbl_user', 'tbl_profile'))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array('tbl_user', '(select * from tbl_profile) p'))

where()

function where($conditions, $params=array())

Method menetapkan bagian

SELECT DISTINCT `id`, `username`
6 pada query. Parameter
SELECT DISTINCT `id`, `username`
7 menentukan kondisi query sedangkan
SELECT DISTINCT `id`, `username`
8 menentukan parameter yang diikat pada keseluruhan query. Parameter
SELECT DISTINCT `id`, `username`
7 dapat berupa sebuah string (misalnya
// FROM `tbl_user`
from('tbl_user')
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from('tbl_user u, public.tbl_profile p')
// FROM `tbl_user`, `tbl_profile`
from(array('tbl_user', 'tbl_profile'))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array('tbl_user', '(select * from tbl_profile) p'))
0) atau sebuah array dengan format:

array(operator, operand1, operand2, ...)

dengan

// FROM `tbl_user`
from('tbl_user')
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from('tbl_user u, public.tbl_profile p')
// FROM `tbl_user`, `tbl_profile`
from(array('tbl_user', 'tbl_profile'))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array('tbl_user', '(select * from tbl_profile) p'))
1dapat bisa berupa :

  • // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    2: operan harus digabung dengan menggunakan
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    3. Misalnya
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    4 akan menghasilkan
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    5. Jika operan adalah array, maka akan diubah menjadi string dengan menggunakan aturan yang sama. Misalnya
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    6 akan menghasilkan
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    7. Method ini tidak akan memberikan quote ataupun escape character.

  • // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    8: mirip dengan operator
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    2 hanya saja operan-operan akan digabung dengan OR.

  • function where($conditions, $params=array())
    0: Operan satu harus berupa kolom atau ekspresi DB, dan operan 2 harus berupa array yang merepresentasikan kumpulan nilai yang harus dipenuhi oleh kolom atau ekspresi DB. Misalnya
    function where($conditions, $params=array())
    1 akan menghasilkan
    function where($conditions, $params=array())
    2. Method ini akan memberikan quote pada nama kolom dan nilai escape di dalam range.

  • function where($conditions, $params=array())
    3: mirip dengan operator
    function where($conditions, $params=array())
    0 kecuali tulisan
    function where($conditions, $params=array())
    5 akan diubah dengan
    function where($conditions, $params=array())
    6 di dalam kondisi yang di-generate.

  • function where($conditions, $params=array())
    7: operan 1 harus berupa kolom atau ekspresi DB, dan operan 2 harus berupa string atau sebuah array yang mewakili range dari nilai-nilai di kolom atau ekspresi DB yang mirip. Misalnya,
    function where($conditions, $params=array())
    8 akan menghasilkan
    function where($conditions, $params=array())
    9. Ketika range nilai diberikan sebagai array, maka beberapa predikat
    array(operator, operand1, operand2, ...)
    0 akan di-generate dan digabungkan dengan menggunakan
    // FROM `tbl_user`
    from('tbl_user')
    // FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
    from('tbl_user u, public.tbl_profile p')
    // FROM `tbl_user`, `tbl_profile`
    from(array('tbl_user', 'tbl_profile'))
    // FROM `tbl_user`, (select * from tbl_profile) p
    from(array('tbl_user', '(select * from tbl_profile) p'))
    3. Misalnya
    array(operator, operand1, operand2, ...)
    2 akan menghasilkan
    array(operator, operand1, operand2, ...)
    3. Method ini akan memberikan quote pada nama kolom dan nilai escape pada range nilai.

  • array(operator, operand1, operand2, ...)
    4: mirip dengan operator
    function where($conditions, $params=array())
    7 kecuali tulisan
    array(operator, operand1, operand2, ...)
    0 akan diganti dengan
    array(operator, operand1, operand2, ...)
    7 pada kondisi yang dihasilkan.

  • array(operator, operand1, operand2, ...)
    8: mirip dengan operator
    function where($conditions, $params=array())
    7 hanya saja tulisan
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    00 yang digunakan untuk menggabungkan beberapa predikat
    array(operator, operand1, operand2, ...)
    0.

  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    02: mirip dengan operator
    array(operator, operand1, operand2, ...)
    4 kecuali
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    00 yang digunakan untuk menggabungkan predikat
    array(operator, operand1, operand2, ...)
    7.

Berikut merupakan beberapa contoh yang menggunakan

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
06:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
0

Perhatikan bahwa ketika menggunakan operator

function where($conditions, $params=array())
7, kita harus menentukan karakter wildcard secara eksplisit (seperti
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
08 dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
09) . JIka polanya berasal dari input user, maka kita harus menggunakan code berikut untuk escape karakter spesial guna menghindarinya dianggap sebagai wildcard:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
1

order()

Method menentukan bagian

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
10 pada query. Parameter
function selectDistinct($columns)
9 menentukan kolom-kolom yang diurutkan. Dapat berupa sebuah string dengan kolom yang dipisahkan koma dan arah pengurutan (
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
12 atau
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
13), atau sebuah array dari kolom dan arah pengurutan. Nama kolom dapat mengandung prefiks table. Method ini akan memberikan quote pada nama kolom secara otomatis kecuali kolom tersebut mengandung tanda kurung (yang berarti kolom tersebut merupakan ekspresi DB).

Berikut merupakan beberapa contohnya:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
2

limit() dan offset()

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
3

Method dan menentukan bagian

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
14 dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
15 pada query. Perhatikan bahwa beberapa DBMS mungkin tidak mendukung sintaks
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
15 dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
14. Pada kasus tersebut, Query Builder akan menulis ulang seluruh statement SQL untuk mensimulasi fungsi limit dan offset.

Berikut merupakan beberapa contoh:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
4

join() dan varian-variannya

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
5

Method dan varian-variannya menentukan bagaimana melakukan join dengan table lain dengan menggunakan

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
18,
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
19,
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
20,
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
21, atau
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
22. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan table mana yang akan dijoin. Nama table akan mengandung prefiks skema dan /atau alias. Method ini akan memberikan quote pada nama table kecuali kolom tersebut mengandung tanda kurung yang artinya bis berupa ekspresi DB atau sub-query. Parameter
SELECT DISTINCT `id`, `username`
7 menentukan kondisi join. Sintaksnya sama dengan . Dan
SELECT DISTINCT `id`, `username`
8 menentukan parameter yang diikat pada keseluruhan query.

Perhatikan bahwa tidak seperti method query builder lainnya, setiap pemanggilan method join akan ditambahkan di belakang sebelumnya.

Berikut merupakan beberapa contohnya.

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
6

group()

Method menetapkan bagian

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
26 pada query. Parameter
function selectDistinct($columns)
9 menentukan kolom-kolom yang dikelompokkan. Bisa berupa string yang berisi kolom dipisah koma, atau sebuah array dari kolom. Nama kolom bisa didapatkan pada prefiks table. Method ini akan secara otomatis memberikan quote pada nama kolom kecuali terdapat sebuah kolom yang mengandung tanda kurung (yang artinya kolom tersebut merupakan ekspresi DB).

Berikut beberapa contoh:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
7

having()

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
8

Method menetapkan bagian

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
28 pada query. Penggunaannya sama dengan .

Berikut contoh-contohnya:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
9

union()

Method menentukan bagian

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
29 pada query. Method ini akan menambahkan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
30 ke SQL yang sudah ada dengan menggunakan operator
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
29. Memanggil
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
32 beberapa kali akan menambahkan berkali-kali SQL-SQL-nya ke belakang SQL yang sudah ada.

Contoh:

$command = Yii::app()->db->createCommand();
0

Menjalankan Query

Setelah melakukan pemanggilan method query builder di atas, kita dapat memanggil method DAO seperti yang dijelaskan pada Data Access Objects untuk mengeksekusi query. Misalnya, kita dapat memanggil untuk mendapatkan sebaris hasil atau untuk mendapatkan seluruhnya sekaligus. Berikut beberapa contohnya :

$command = Yii::app()->db->createCommand();
1

Mengambil SQL-SQL

Selain menjalankan query yang dibuat oleh Query Builder, kita juga dapat menarik statement SQL bersangkutan. Untuk melakukannya gunakan fungsi .

$command = Yii::app()->db->createCommand();
2

Jika terdapat parameter tertentu yang terikat pada query, mereka dapat diambil melalui properti .

Sintaks Alternatif untuk Membentuk Query

Kadangkala, menggunakan method chaining bukanlah pilihan yang tepat. Query Builder Yii memungkinkan kita untuk membuat query dengan menggunakan assignment property object yang sederhana. Pada umumnya, untuk setiap method query builder, terdapat sebuah property yang memiliki nama yang sama. Meng-assign nilai ke property sama saja dengan memanggil method tersebut. Misalnya, berikut merupakan dua statement yang ekuivalen, dengan asumsi

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
33 adalah objek CDbCommand:

$command = Yii::app()->db->createCommand();
3

Selain itu, method dapat menerima array sebagai parameter. Pasangan nama-nilai di array akan digunakan untuk inisialisasi property instance CDbCommand yang dibuat. Ini artinya, kita dapat menggunakan code berikut untuk membuat sebuah query:

$command = Yii::app()->db->createCommand();
4

Membangun Beberapa Query

Sebuah instance CDbCommand dapat dipakai ulang beberapa kali untuk membuat beberapa query. Namun, sebelum membuat query baru, harus memanggil method terlebih dahulu untuk menghapus query sebelumnya. Misalnya:

$command = Yii::app()->db->createCommand();
5

3. Membuat Query Manipulasi Data

Query manipulasi data adalah statement SQL untuk melakukan insert, update dan delete data dalam table database. Query builder menyediakan

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
34,
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
35 dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
36 untuk tiap query tersebut. Tidak seperti method query SELECT yang dijelaskan di atas, setiap method query manipulasi data ini akan membuat sebuah statement SQL lengkap dan langsung menjalankannya.

  • : menyisipkan sebaris ke table
  • : melakukan update data pada sebuah table
  • : menghapus data dari table

Di bawah ini kami akan memaparkan method-method query manipulasi data

insert()

$command = Yii::app()->db->createCommand();
6

Method membuat dan menjalankan statement SQL

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
37. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan table yang mana yang disisipkan, sedangkan
function selectDistinct($columns)
9 merupakan sebuah array dengan pasangan nama-nilai yang menjelaskan nilai-nilai kolom yang akan disisipkan. Method tersebut akan memberikan quote pada nama table dan akan menggunakan parameter-binding untuk nilai yang dimasukkan.

Berikut merupakan contohnya:

$command = Yii::app()->db->createCommand();
7

update()

$command = Yii::app()->db->createCommand();
8

Method akan membuat dan mengeksekusi statement

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
40 SQL. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan table mana yang akan di-update;
function selectDistinct($columns)
9 adalah sebuah array dengan pasangan nama-nilai yang menentukan nilai kolom yang akan di-update;
SELECT DISTINCT `id`, `username`
7 dan
SELECT DISTINCT `id`, `username`
8 mirip dengan , yang akan menetapkan klausa
SELECT DISTINCT `id`, `username`
6 dalam statement
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
40. Method ini akan memberikan quote pada nama dan menggunakan parameter-binding untuk nilai yang di-update.

Berikut merupakan contohnya:

$command = Yii::app()->db->createCommand();
9

delete()

function select($columns='*')
0

Method membuat dan menjalankan statement SQL

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
47. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan table yang mana yang akan dihapus;
SELECT DISTINCT `id`, `username`
7 dan
SELECT DISTINCT `id`, `username`
8 mirip dengan , yakni menentukan
SELECT DISTINCT `id`, `username`
6 di dalam statement
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
47. Method ini akan memberikan quote pada nama.

Berikut salah satu contoh:

function select($columns='*')
1

4. Membuat Query Manipulasi Schema

Selain query manipulasi dan penarikan normal, query builder juga menyediakan sekumpulan method yang digunakan untuk membuat dan menjalankan query SQL untuk manipulasi schema pada database. Query builder mendukung query-query berikut:

Info: Walaupun statement SQL yang digunakan untuk manipulasi database schema sangat berbeda di antara DBMS, query builder mencoba menyediakan sebuah interface yang seragam untuk membuat query-query ini. Ini akan memudahkan proses migrasi database dari satu DBMS ke yang lainnya.

Tipe Data Abstrak

Query builder memperkenalkan sekumpulan tipe data abstrak yang dapat digunakan untuk mendefinisikan kolom table. Tidak seperti tipe data physical yang spesifik pada DBMS tertentu dan cukup berbeda di DBMS lainnya, tipe data abstrak bebas dari DBMS. Ketika tipe data abstrak digunakan untuk mendefinisikan kolom table, query builder akan mengubahnya menjadi tipe data physical bersangkutan.

Berikut tipe data abstrak yang didukung oleh query builder.

  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    53: sebuah jenis primary key generik, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    54 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    55: jenis string, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    56 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    57: jenis teks (string panjang), akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    57 pada MySQL
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    59: jenis integer, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    60 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    61: tipe angka floating, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    61 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    63: tipe angka desimal, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    63 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    65: tipe waktu tanggal, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    65 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    67: tipe timestamp, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    67 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    69: tipe waktu, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    69 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    71: tipe tanggal, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    71 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    73: tipe data biner, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    74 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    75: tipe boolean, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    76 pada MySQL;
  • $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    77: tipe mata uang, akan diubah menjadi
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
    // baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
    $command->where('id=:id', array(':id'=>$id));
    78 pada MySQL. Tipe ini sudah ada semenjak versi 1.1.8.

createTable()

function select($columns='*')
2

Method akan membuat dan menjalankan statement SQL untuk menghasilkan sebuah table. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 akan menentukan nama dari table yang dibuat. Parameter
function selectDistinct($columns)
9 menentukan kolom-kolom pada table baru. Kolom-kolom ini harus diberikan dalam bentuk pasangan nama-definisi (misalnya
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
81). Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
82 menentukan pecahan SQL ekstra yang harus ditambahkan pada SQL yang dihasilkan. Query builder akan memberikan quote pada nama table dan nama kolom.

Ketika menentukan definisi sebuah kolom, kita dapat menggunakan tipe data abstrak seperti yang sudah dijelaskan di atas. Query builder akan mengubah tipe data abstrak tersebut menjadi tipe data physical bersangkuta, sesuai dengan DBMS yang digunakan. Misalnya,

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
55 akan diubah menjadi
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
56 pada MySQL.

Sebuah definisi kolom juga bisa mengandung tipe data non-abstrak atau spesifikasi. Definisi kolom ini akan dmasukkan juga ke dalam SQL tanpa perubahan. Misalnya

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
85 bukanlah tipe data abstrak, dan jika digunakan di definisi kolom, maka akan keluar demikian pada SQL; dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
86 akan diubah menjadi
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
87 (hanya tipe abstrak
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
55 yang diubah).

Berikut contoh bagaimana membuat sebuah table:

function select($columns='*')
3

renameTable()

function select($columns='*')
4

Method membuat dan menjalankan statement SQL untuk mengubah nama table. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama dari table yang akan di-rename. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
90 menentukan nama baru dari table. Query builder akan memberikan quote pada nama table.

Berikut contoh bagaimana melakukan perubahan nama pada table :

function select($columns='*')
5

dropTable()

function select($columns='*')
6

Method membuat dan menjalankan statement SQL untuk menghapus sebuah table. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama table yang akan di-drop (hapus). Query builder akan memberikan quote pada nama table.

Berikut contoh bagaimana menghapus sebuah table:

function select($columns='*')
7

function select($columns='*')
8

Method membuat dan menjalankan statement SQL untuk menghapus sebuah table. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama table yang ingin dikosongkan. Query builder akan memberikan quote pada nama table.

Berikut contoh bagaimana mengosongkan table:

function select($columns='*')
9

addColumn()

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
0

Method membuat dan menjalankan statement SQL untuk menambah kolom table baru. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama dari table yang akan ditambahkan kolom baru. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
94 akan menentukan nama dari kolom baru. Dan
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
95 menentukan definisi kolom baru. Definisi kolom dapat mengandung tipe data abstrak, seperti yang dijelaskan pada sub-bagian "createTable" sebelumnya. Query builder akan memberikan quote pada nama table termasuk nama kolom.

Berikut contoh menambah sebuah kolom table:

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
1

dropColumn()

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
2

Method membuat dan menjalankan statement SQL untuk menghapus kolom table. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama dari table yang kolomnnya akan dihapus. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
94 menentukan nama dari kolom yang akan dihapus. Query builder akan memberikan quote pada nama table termasuk nama kolom.

Berikut contoh bagaimana menghapus sebuah kolom table:

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
3

renameColumn()

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
4

Method membuat dan mengeksekusi statement SQL untuk menghapus indeks. Parameter

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
99 menentukan nama dari yang index-nya akan dihapus. Parameter
$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// baris berikut tidak akan menambahkan WHERE ke klausa SQL di atas.
$command->where('id=:id', array(':id'=>$id));
23 menentukan nama table yang index-nya akan dihapus. Query builder akan memberikan quote pada nama table sekaligus nama index.