Source for file AppSQL.php

Documentation is available at AppSQL.php

  1. <?php
  2. // vim: foldmethod=marker
  3. /**
  4.  *  AppSQL.php
  5.  *
  6.  *  @author     Masaki Fujimoto <fujimoto@php.net>
  7.  *  @license    http://www.opensource.org/licenses/bsd-license.php The BSD License
  8.  *  @package    Ethna
  9.  *  @version    $Id: fab40c289e17f24d2f915bfacb6b81008cc30c13 $
  10.  */
  11.  
  12. // {{{ Ethna_AppSQL
  13. /**
  14.  *  アプリケーションSQLベースクラス
  15.  *
  16.  *  @author     Masaki Fujimoto <fujimoto@php.net>
  17.  *  @access     public
  18.  *  @package    Ethna
  19.  */
  20. {
  21.     /**#@+
  22.      *  @access private
  23.      */
  24.  
  25.     /** @protected    object  Ethna_Controller    controllerオブジェクト */
  26.     protected $controller;
  27.  
  28.     /**#@-*/
  29.  
  30.     /**
  31.      *  Ethna_AppSQLのコンストラクタ
  32.      *
  33.      *  @access public
  34.      *  @param  object  Ethna_Controller    &$controller    controllerオブジェクト
  35.      */
  36.     public function __construct($controller)
  37.     {
  38.         $this->controller = $controller;
  39.     }
  40.  
  41.     /**
  42.      *  適切にエスケープされたSQL文を返す
  43.      *
  44.      *  @access public
  45.      *  @param  string  $sqlfunc    SQL文種別名
  46.      *  @param  array   $args       引数一覧
  47.      *  @return string  エスケープされたSQL文
  48.      */
  49.     public function get($sqlid$args)
  50.     {
  51.         Ethna_AppSQL::escapeSQL($args);
  52.  
  53.         return call_user_func_array(array($this$sqlid)$args);
  54.     }
  55.  
  56.     /**
  57.      *  SQL引数をエスケープする
  58.      *
  59.      *  @access public
  60.      *  @param  mixed   &$var   エスケープする値
  61.      *  @static
  62.      */
  63.     public static function escapeSQL(&$var$type null)
  64.     {
  65.         if (!is_array($var)) {
  66.             if (is_null($var)) {
  67.                 $var 'NULL';
  68.             else {
  69.                 if ($type === 'sqlite'{
  70.                     $var "'" sqlite_escape_string($var"'";
  71.                 else {
  72.                     $var "'" addslashes($var"'";
  73.                 }
  74.             }
  75.             return;
  76.         }
  77.         foreach (array_keys($varas $key{
  78.             Ethna_AppSQL::escapeSQL($var[$key]$type);
  79.         }
  80.     }
  81.  
  82.     /**
  83.      *  escapeSQLでエスケープされた文字列をunescapeする
  84.      *
  85.      *  @access public
  86.      *  @param  mixed   &$var   エスケープを復帰する値
  87.      *  @static
  88.      */
  89.     public static function unescapeSQL(&$var$type null)
  90.     {
  91.         if (!is_array($var)) {
  92.             if ($var == 'NULL'{
  93.                 return;
  94.             }
  95.             $var substr($var1strlen($var)-2);
  96.             $var stripslashes($var);
  97.             return;
  98.         }
  99.         foreach (array_keys($varas $key{
  100.             Ethna_AppSQL::unescapeSQL($var[$key]$type);
  101.         }
  102.     }
  103.  
  104.     /**
  105.      *  WHERE条件文を生成する
  106.      *
  107.      *  @access public
  108.      *  @param  string  $field      検索対象のフィールド
  109.      *  @param  mixed   $value      検索値
  110.      *  @param  int     $condition  検索条件(OBJECT_CONDITION_NE,...)
  111.      *  @return string  検索条件文
  112.      *  @static
  113.      */
  114.     public static function getCondition($field$value$condition OBJECT_CONDITION_EQ)
  115.     {
  116.         switch ($condition{
  117.         case OBJECT_CONDITION_EQ:
  118.             $op "="break;
  119.         case OBJECT_CONDITION_NE:
  120.             $op "!="break;
  121.         case OBJECT_CONDITION_LIKE:
  122.             $op "LIKE"break;
  123.         case OBJECT_CONDITION_GT:
  124.             $op ">"break;
  125.         case OBJECT_CONDITION_LT:
  126.             $op "<"break;
  127.         case OBJECT_CONDITION_GE:
  128.             $op ">="break;
  129.         case OBJECT_CONDITION_LE:
  130.             $op "<="break;
  131.         }
  132.  
  133.         // default operand
  134.         $operand $value;
  135.  
  136.         if (is_array($value)) {
  137.             if (count($value0{
  138.                 switch ($condition{
  139.                 case OBJECT_CONDITION_EQ:
  140.                     $op "IN"break;
  141.                 case OBJECT_CONDITION_NE:
  142.                     $op "NOT IN"break;
  143.                 }
  144.                 $operand sprintf("(%s)"implode(','$value));
  145.             else {
  146.                 // always be false
  147.                 $op "=";
  148.                 $operand "NULL";
  149.             }
  150.         else {
  151.             if ($value == 'NULL'{
  152.                 switch ($condition{
  153.                 case OBJECT_CONDITION_EQ:
  154.                     $op "IS"break;
  155.                 case OBJECT_CONDITION_NE:
  156.                     $op "IS NOT"break;
  157.                 }
  158.             }
  159.             if ($condition == OBJECT_CONDITION_LIKE{
  160.                 Ethna_AppSQL::unescapeSQL($value);
  161.                 $value '%' str_replace('%''\\%'$value'%';
  162.                 Ethna_AppSQL::escapeSQL($value);
  163.                 $operand $value;
  164.             }
  165.         }
  166.         return "$field $op $operand";
  167.     }
  168. }
  169. // }}}

Documentation generated on Fri, 11 Nov 2011 03:57:41 +0900 by phpDocumentor 1.4.3