예제 #1
0
파일: DTC.php 프로젝트: karottc/dtc_jd
 /**
  * 增加一条数据库记录
  *
  * @param data    需要insert 的数据
  */
 public function insert($data)
 {
     $this->clearERR();
     if ($this->server == false && $this->init() == false) {
         return false;
     }
     if ($this->check($data) == false) {
         return false;
     }
     $key = $this->config['KEY'];
     $fields = $this->config['FIELDS'];
     $keyConfig = $fields[$key];
     if (!isset($data[$key]) && $keyConfig['auto'] == false) {
         $this->errCode = 20041;
         $this->errMsg = "dtc config:{$this->dtcKey} insert key not set";
         return false;
     }
     $req = new tphp_ttc_request($this->server, TPHP_DTC_OP_INSERT);
     if (isset($data[$key])) {
         if ($this->key_type == 1) {
             $errCode = $req->set_key($data[$key]);
         } elseif ($this->key_type == 2) {
             $errCode = $req->set_key_str($data[$key]);
         } else {
             $this->errCode = 200106;
             $this->errMsg = 'request failed';
             return false;
         }
         if ($errCode != 0) {
             $this->errCode = $errCode;
             $this->errMsg = "dtc config:{$this->dtcKey} insert:{$key}: set_key error";
             return false;
         }
     }
     foreach ($data as $k => $v) {
         if ($k == $key) {
             continue;
         }
         if (!isset($fields[$k])) {
             continue;
         }
         $tmpConfig = $fields[$k];
         switch ($tmpConfig['type']) {
             case DTC::INT:
                 $data[$k] = $data[$k] + 0;
                 // 确保类型正确,否则dtc扩展报warnning
                 $req->set($k, $data[$k]);
                 break;
             case DTC::STRING:
                 $data[$k] = $data[$k] . '';
                 // 确保类型正确,否则dtc扩展报warnning
                 $req->set_str($k, $data[$k]);
                 break;
             case DTC::BINARY:
                 $data[$k] = $data[$k] . '';
                 // 确保类型正确,否则dtc扩展报warnning
                 $req->set_bin($k, $data[$k]);
                 break;
             case DTC::FLOAT:
                 $data[$k] = $data[$k] . '';
                 // 确保类型正确,否则dtc扩展报warnning
                 $req->set_flo($k, $data[$k]);
                 break;
             default:
                 $this->errCode = 20043;
                 $this->errMsg = "dtc config:{$this->dtcKey} field:{$k} data type:{$v['type']} error";
                 return false;
         }
     }
     $result = new tphp_ttc_result();
     $req->execute($result);
     $this->result = $result;
     //TODO...
     $errCode = $result->result_code();
     if ($errCode != 0) {
         $this->dtcCode = $errCode;
         $this->errCode = $errCode;
         $k_val = isset($data[$key]) ? $data[$key] : '[auto_increment]';
         //$this->errMsg  = "dtc config:{$this->dtcKey} insert:{$k_val} error,code:{$errCode}";
         $this->errMsg = $result->error_message();
         $this->errFrom = $result->error_from();
         return false;
     }
     // 若为自增型key,返回insert_id
     if (!isset($data[$key]) && $keyConfig['auto']) {
         $autoinc_id = $result->int_key();
         return $autoinc_id;
     }
     return true;
 }