/** * 增加一条数据库记录 * * @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; }