PDO Statement and WHERE IN() Clause


Contoh : 

......................
    /**
     * @param mixed<integer:array> $kd_kelas
     * @param integer $bulan
     * @param integer $tahun
     * @param integer $semester
     * @param string $jenis_absen
     * @param string $nis
     */
    public static function getDetailInformasiAbsensi($kd_kelas = '', $bulan = '', $tahun = '', $semester = '', $jenis_absen = '', 
                                                     $nis = '')
    {
        if(!is_array($kd_kelas)) {
          $kd_kelas = explode(",", $kd_kelas);
        }                          
        
        $sum_jenis_absen_sql = ' ';
        $jenis_absen         = strtolower($jenis_absen);
        switch ($jenis_absen) {
            case 'hadir':
                $sum_jenis_absen_sql   = ' sum(absensi.hadir) AS jumlah';
                $where_jenis_absen_sql = ' absensi.hadir=1 ';
                break;
            case 'terlambat':
                $sum_jenis_absen_sql   = ' sum(absensi.terlambat) AS jumlah ';
                $where_jenis_absen_sql = ' absensi.terlambat=1 ';
                break;
            case 'sakit':
                $sum_jenis_absen_sql   = ' sum(absensi.sakit) AS jumlah ';
                $where_jenis_absen_sql = ' absensi.sakit=1 ';
                break;
            case 'izin':
                $sum_jenis_absen_sql   = ' sum(absensi.izin) AS jumlah ';
                $where_jenis_absen_sql = ' absensi.izin=1 ';
                break;
            case 'alpa':
                $sum_jenis_absen_sql   = ' sum(absensi.alpa) AS jumlah ';
                $where_jenis_absen_sql = ' absensi.alpa=1 ';
                break;
            case 'bolos':
                $sum_jenis_absen_sql   = ' sum(absensi.bolos) AS jumlah ';
                $where_jenis_absen_sql = ' absensi.bolos=1 ';
                break;
        }
        $connection = Propel::getConnection();
        $query      = "SELECT absensi.nis AS nis,
         siswa.nama AS nama,
         {$sum_jenis_absen_sql},
         GROUP_CONCAT(DATE_FORMAT(absensi.tanggal_absen,'%W, %d-%m-%Y') SEPARATOR ':') AS tanggal
         FROM (absensi, siswa) INNER JOIN siswa_kelas
         ON (absensi.NIS=siswa_kelas.NIS)
                         WHERE (siswa_kelas.KD_KELAS IN(".utils::pdo_param_repeat("?",count($kd_kelas)).") 
                                AND absensi.KD_KELAS IN(".utils::pdo_param_repeat("?",count($kd_kelas))."))
         AND (siswa_kelas.TAHUN=? AND absensi.TAHUN=?)
         AND {$where_jenis_absen_sql} AND date_format(absensi.TANGGAL_ABSEN, '%c') = ?
         AND absensi.SEMESTER=? ";
        if (!empty($nis)) {
            $query .= ' AND absensi.NIS=? ';
        }

        $query .= ' AND absensi.NIS=siswa.NIS group by absensi.nis ';
       
        $statement = $connection->prepareStatement($query);         
        $idx = 1 ; 
        for($i=0;$i<count($kd_kelas);$i++) {            
          $statement->setInt($idx, $kd_kelas[$i]);          
          $idx += 1 ;
        }
        for($i=0;$i<count($kd_kelas);$i++) {
          $statement->setInt($idx, $kd_kelas[$i]);          
          $idx += 1 ;
        }                    
        
        $statement->setInt($idx, $tahun);
        $idx += 1 ;
        $statement->setInt($idx, $tahun);
        $idx += 1 ;
        $statement->setInt($idx, $bulan);
        $idx += 1 ;        
        $statement->setInt($idx, $semester);                
        if (!empty($nis)) {
            $idx += 1 ;            
            $statement->setString($idx, $nis);
        }
        
        $resultset = $statement->executeQuery();

        return $resultset;

    }
......................

utils.class.php 

......................
public static function pdo_param_repeat($string, $multiplier) {
$ret = "";
for($i=0;$i<$multiplier;$i++) {
  if ($i) $ret.=",";
  $ret.= " ".$string." ";
}
return $ret ;
}
......................
Comments