| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | 
							- <?php
 
- namespace KIF\Dao;
 
- use KIF\Exception\ParamsException;
 
- use KIF\Verify;
 
- /*
 
-  * Sql助手类
 
-  * @author gaoxiaogang@yoka.com
 
-  */
 
- class SqlHelper {
 
-     /**
 
-      * 转义数据
 
-      * @param mixed $data
 
-      * @param boolean $isQuote 字符串值是否用引号引起来。默认不括起来。
 
-      * @return mixed
 
-      */
 
-     static public function escape($data, $isQuote = false) {
 
-         if (is_int($data)) {
 
-             return strval($data);
 
-         } elseif (is_float($data)) {
 
-             return strval($data);
 
-         } elseif (is_string($data)) {
 
-         	if ($isQuote) {
 
-         		# 判断值是否需要 quote 起来
 
-         		if (self::isWrapperNoQuote($data)) {
 
-         			return addslashes(self::UnwrapperNoQuote($data));
 
-         		} else {
 
-         			return "'" . addslashes($data) . "'";
 
-         		}
 
-         	} else {
 
-         		return addslashes($data);
 
-         	}
 
-         } elseif (is_bool($data)) {
 
-             return strval(intval($data));
 
-         } elseif (empty($data)) {
 
-             if ($isQuote) {
 
-                 return "''";
 
-             } else {
 
-                 return '';
 
-             }
 
-         } elseif (is_array($data)) {
 
-             foreach ($data as &$val) {
 
-                 $val = self::escape($val, $isQuote);
 
-             }
 
-             return $data;
 
-         } else {
 
-             return false;
 
-         }
 
-     }
 
-     /**
 
-      * 判断给定的值是否是有效的自增主键值
 
-      * @param mixid $pk
 
-      * @return boolean
 
-      */
 
-     static public function isValidPK($pk) {
 
-     	# 对开心用户id的处理有大bug,时间上来不及,先通过所有验证
 
-     	return true;
 
-     	if (!Verify::unsignedInt($pk)) {
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     /**
 
-      * 判断给定数组的某个key的值,是否是有效的自增主键值
 
-      * @param array $arr
 
-      * @param mixid $key
 
-      * @return boolean
 
-      */
 
-     static public function isValidPKWithArray(array $arr, $key) {
 
-         if (empty($arr)) {
 
-             return false;
 
-         }
 
-         if (!array_key_exists($key, $arr)) {
 
-             return false;
 
-         }
 
-         return self::isValidPK($arr[$key]);
 
-     }
 
-     /**
 
-      *
 
-      * 对值 $str 做包装,表示该值不需要 引(quote) 起来
 
-      * @param string $str
 
-      * @return string
 
-      */
 
-     static public function wrapperNoQuote($str) {
 
-     	if (empty($str)) {
 
-     		return $str;
 
-     	}
 
-     	return "NOQUOTE{$str}NOQUOTE";
 
-     }
 
-     /**
 
-      *
 
-      * 是否对值 $str 做了不需要 引(quote) 起来的包装
 
-      * @param string $str
 
-      * @return Boolean
 
-      */
 
-     static public function isWrapperNoQuote($str) {
 
- 		if (strpos($str, 'NOQUOTE') !== 0) {
 
- 			return false;
 
- 		}
 
- 		if (strrpos($str, 'NOQUOTE') !== (strlen($str) - strlen('NOQUOTE'))) {
 
- 			return false;
 
- 		}
 
- 		return true;
 
-     }
 
-     /**
 
-      *
 
-      * 去除不 引(quote) 起来的包装
 
-      * @param string $str
 
-      * @return string
 
-      */
 
-     static public function UnwrapperNoQuote($str) {
 
-     	return str_replace('NOQUOTE', '', $str);
 
-     }
 
-     /**
 
-      *
 
-      * 将sql里的比较操作符添加到 $val里
 
-      * DBAbstract::parseCondition 方法,会调用 SqlHelper::explodeCompareOperator 方法来拆解值与比较操作符
 
-      * @param string $operator 比较操作符。如: >= 、 < 、!=
 
-      * @param scalar $val 标题数据
 
-      * @throws ParamsException '参数val必须是标量scalar类型'
 
-      * @return string
 
-      */
 
-     static public function addCompareOperator($operator, $val) {
 
- 		if (!is_scalar($val)) {
 
- 			throw new ParamsException("参数val必须是标量scalar类型");
 
- 		}
 
-     	$val = "COMPARE{$operator}COMPARE    {$val}";
 
-     	return $val;
 
-     }
 
-     /**
 
-      *
 
-      * 拆解 $val 里的 比较操作符 与 数据。
 
-      * 如果含比较操作符,则认为比较操作符是 =
 
-      * @param string $val
 
-      * @return string
 
-      */
 
-     static public function explodeCompareOperator($val) {
 
-     	$pattern = '#^(\'?)COMPARE(.+?)COMPARE\s{4}#';
 
-     	if (!preg_match($pattern, $val, $match)) {
 
- 			return "  =  {$val}  ";
 
-     	}
 
-     	$compareOperator = $match[2];
 
-     	$val = preg_replace($pattern, '$1', $val);
 
-     	return "  {$compareOperator}  {$val}  ";
 
-     }
 
- }
 
 
  |