/** * 获得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; }