Welcome to Abdul Malik Ikhsan's Blog

SubQuery pada Zend_Db_Select

Posted in tips and tricks, Tutorial PHP by samsonasik on October 30, 2009

Anggaplah kita akan menjalankan query seperti berikut :

select is_add from dwt_menushow where menu_id = any(select menu_id
from dwt_menu where menu_link = 'mfirst') and groupuser_id = 1

Maka yang harus kita lakukan adalah mengkonversi penggunaan Zend_Db_Select pada subquery menjadi String.

$exp = $this->db->select()->from($this->prefixDbDefault."menu",
   array('menu_id'))
 ->where("menu_link = 'mfirst' ")
 ->__toString();

Setelah itu, baru kita panggil :

$select = $this->db->select()->
  from($this->prefixDbDefault."menushow",array("is_add"))
 ->where("menu_id = any( $exp ) and groupuser_id = 1 ");

//cek ...
echo "<pre>";
print_r($this->db->fetchAll($select));
echo "</pre>"

Referensi : http://old.nabble.com/

Advertisements
Tagged with:

PHP 5.3 safe mode

Posted in tips and tricks, Tutorial PHP by samsonasik on October 29, 2009

HP 5.3 disamping banyak mempermudah, di sisi lain jg sangat strict, sehingga yg terbiasa coding-nya agak acak-acakan (seperti saya, he.he.he.), akan sangat kesulitan ketika upgrade ke versi ini. Nah, cara mengatasinya adalah penggunaan error_reporting, cara ini saya anggap ampuh untuk menangani kode program yang strict tersebut, seperti : undefined variable, Undefined offset array, header already sent,  dan lain2. Sebagai contoh, kita definisikan error_reporting(0) di line pertama :

<?php
error_reporting(0);
//coding php yg lainnya ...

Untuk melihat perbandingan pelevelan-nya, bisa dilihat di sini

PHP 5.3 session.save_path

Posted in tips and tricks, Tutorial PHP by samsonasik on October 29, 2009

PHP 5.3 memang aneh bin ajaib, walaupun banyak sekali menuai kritik karena banyak mengangkat deprecated function, tapi tetap aja banyak pula yang tertarik karena fitur2 nya yg luar biasa, lihat PHP 5.3.0 Release Announcement . Karena ketertarikan itu pula-lah, banyak yg mencoba meng-kick hal-hal yang mengganggu itu, salah satu di antara-nya adalah saya (wkwkwk…).

Kemarin ceritanya, saya mencoba php 5.3 untuk Zend Framework. Nah, pas pakai session, ternyata ada masalah, masalahnya adalah halaman menjadi blank, tanpa respon apapun. Dug…, saya langsung panik, gmn neh…, nah, setelah itu saya cari2 tahu dengan mendebug line demi line (karena sebelumnya saya tidak tahu bahwa letak kesalahannya berada pada Zend_Session_Namespace). Nah, ternyata ketemu, permasalahannya ada di baris setelah instansiasi kelas Zend_Session_Namespace. Saya langsung cari tahu di Google , nah, ketemu, cara mengakalinya dengan mendefinisikan secara eksplisit session.save_path di php.ini, misal

;;;;
session.save_path = "/tmp"
;;;;

Pastikan directory tujuan bersifat writable agar bisa ditulisi.
Selamat mencoba :).

Namespace ‘jadi-jadian’ ala PHP

Posted in Tutorial PHP by samsonasik on October 20, 2009

Namespace dapat dikatakan container yang mengelompokkan source code. Sejak lama, dalam Java telah kita kenal namespace, berupa penggunaan package di mana ketika kita mendefinisikan, misalnya, package org.postgresql , berarti class yang dipanggil berada dalam folder org/postgresql. Bagaimana dengan php ? Di php 5.3, namespace sudah mulai diperkenalkan, hanya saja, pendefinisian-nya menjadi rancu ketika kita masih tetap membutuhkan require. Lah, terus buat apa ada namespace? Tentu saja gunanya untuk pengelompokan file sehingga lebih dapi dan mudah untuk ditrace. Tentu saja kita ingin hal lain dong selain hal tersebut. Nah, untuk itu, perlu ada nya trik khusus, seperti di bawah ini.

Anggap saja kita mempunyai struktur direktori seperti di bawah ini :
namespacer Nah, yang kita perlukan adalah trik penggunaan function __autoload dalam php, yang akan mendefinisikan hal2 yg harus dilakukan ketika sebuah class diinstansiasi menjadi sebuah object.

Tentu penggunaan function __autoload ini bukan tanpa aturan. sebagai contoh, dalam file TestClass.php, saya buat sebuah class bernama org_samsonasik_TestClass , hal ini berguna untuk pemisahan folder nantinya.
source code TestClass.php :

<?php
 class org_samsonasik_TestClass{
 public function __construct($args)
 {
 echo $args ;
 }
 }

Nah, dalam file pemanggilnya, kita buat function __autoload :
sourcecode index.php

<?php

function __autoload($class)
{
 $file = str_replace("_","/",$class.".php");
 require_once $file;
}

$test = new org_samsonasik_TestClass("test");

ketika pemanggilan new org_samsonasik_TestClass, berarti telah merequire folder2 dalam package dengan akal-akalan function __autoload tersebut. Fungsi inilah yg digunakan seperti pada framework Zend.