예제 #1
0
파일: DTC.php 프로젝트: karottc/dtc_jd
 /**
  * 获得DTC记录
  *
  * @param   string  $key, 数据库的主键
  * @param   array   $multikey, 可选参数, 多字段key时必选, 形如array('field2' => 1, 'field3' => 2)
  * @param   array    $need, 可选参数, 默认返回所有列,也可以指明需要返回的列
  * @param   int    $start, 可选参数, 默认从第一条符合条件的记录开始返回,也可指定返回记录的起始偏移量
  * * @param   int    $need, 可选参数, 默认返回所有符合条件的记录,也可指明需要的条数
  */
 public function get($key, $multikey = array(), $need = array(), $itemLimit = 0, $start = 0)
 {
     $this->clearERR();
     if ($this->server == false && $this->init() == false) {
         return false;
     }
     if ($this->checkKey($key) == false) {
         return false;
     }
     $req = new tphp_ttc_request($this->server, TPHP_DTC_OP_GET);
     if ($this->key_type == 1) {
         $errCode = $req->set_key($key);
     } elseif ($this->key_type == 2) {
         $errCode = $req->set_key_str($key);
     } else {
         $this->errCode = 20020;
         $this->errMsg = 'request failed';
         return false;
     }
     if ($errCode != 0) {
         $this->errCode = $errCode;
         $this->errMsg = "dtc config:{$this->dtcKey} get:{$key}: set_key error";
         return false;
     }
     /*当前版本的dtc暂不支持多key的需求
     		if ( !empty($multikey) && is_array($multikey) ) {
     			// 处理多字段key情况
     			foreach ( $multikey as $mk => $mv ) {
     				$chk = $this->checkMultikey($mk, $mv);
     				if ( !$chk ) {
     					return $chk;
     				}
     				$eq = $this->eqv($req, $mk, $mv);
     				if ( $eq != 0 ) {
     					$this->errCode = 20028;
     					$this->errMsg  = "dtc config:{$this->dtcKey} get:{$key}: set multikey error";
     
     					return false;
     				}
     			}
     		}*/
     $fields = $this->config['FIELDS'];
     var_dump($fields);
     $keyfield = $this->config['KEY'];
     if (empty($need)) {
         foreach ($fields as $k => $v) {
             if ($keyfield == $k) {
                 continue;
             }
             $errCode = $req->need($k);
             if ($errCode != 0) {
                 $this->errCode = $errCode;
                 $this->errMsg = "dtc config:{$this->dtcKey} need({$k}) error,error code:{$errCode}";
                 return false;
             }
         }
     } else {
         foreach ($need as $k) {
             if ($keyfield == $k) {
                 continue;
             }
             $errCode = $req->need($k);
             if ($errCode != 0) {
                 $this->errCode = $errCode;
                 $this->errMsg = "dtc config:{$this->dtcKey} need({$k}) error,error code:{$errCode}";
                 return false;
             }
         }
     }
     if (0 != $itemLimit) {
         $errCode = $req->limit($start, $itemLimit);
         if ($errCode != 0) {
             $this->dtcCode = $errCode;
             $this->errCode = $errCode;
             $this->errMsg = "dtc config:{$this->dtcKey} get:{$key} error,error code:{$errCode}";
             return false;
         }
     }
     $result = new tphp_ttc_result();
     $req->execute($result);
     $this->result = $result;
     $errCode = $result->result_code();
     if ($errCode != 0) {
         $this->dtcCode = $errCode;
         $this->errCode = $errCode;
         //$this->errMsg  = "dtc config:{$this->dtcKey} get:{$key} error,error code:{$errCode}";
         $this->errMsg = $result->error_message();
         $this->errFrom = $result->error_from();
         return false;
     }
     $rowCount = $result->num_rows();
     $multiRows = array();
     for ($i = 0; $i < $rowCount; ++$i) {
         $ret = $result->fetch_row();
         if ($ret < 0) {
             $this->errCode = 20026;
             $this->errMsg = "dtc config:{$this->dtcKey} get:{$key} error,fetch_row error";
             return false;
         }
         $rData = array();
         if (empty($need)) {
             foreach ($fields as $k => $v) {
                 if ($k == $keyfield) {
                     continue;
                 }
                 switch ($v['type']) {
                     case DTC::INT:
                         $rData[$k] = $result->int_value($k);
                         break;
                     case DTC::STRING:
                         $rData[$k] = $result->string_value($k);
                         break;
                     case DTC::BINARY:
                         $rData[$k] = $result->binary_value($k);
                         break;
                     case DTC::FLOAT:
                         $rData[$k] = $result->float_value($k);
                         break;
                     default:
                         $this->errCode = 20027;
                         $this->errMsg = "dtc config:{$this->dtcKey} field:{$k} data type:{$v['type']} error";
                         return false;
                 }
             }
             $rData[$keyfield] = $key;
             $multiRows[] = $rData;
         } else {
             foreach ($need as $k) {
                 if ($k == $keyfield) {
                     continue;
                 }
                 switch ($fields[$k]['type']) {
                     case DTC::INT:
                         $rData[$k] = $result->int_value($k);
                         break;
                     case DTC::STRING:
                         $rData[$k] = $result->string_value($k);
                         break;
                     case DTC::BINARY:
                         $rData[$k] = $result->binary_value($k);
                         break;
                     case DTC::FLOAT:
                         $rData[$k] = $result->float_value($k);
                         break;
                     default:
                         $this->errCode = 20027;
                         $this->errMsg = "dtc config:{$this->dtcKey} field:{$k} data type:{$v['type']} error";
                         return false;
                 }
             }
             $rData[$keyfield] = $key;
             $multiRows[] = $rData;
         }
     }
     return $multiRows;
 }