table_name; $data = $this->dao->db->build_key($data, $this->fields); } return $this->init_db()->insert($data, $table_name, $ignore); } /** * 获取全部 * @param array $field * @param string $id_key * @param string $sort * @param string $table_name * @return array */ public function getAll($field = array(), $id_key = 'id', $sort = 'ASC', $table_name = null) { !$table_name ? $table_name = $this->table_name : null; $id_key = !empty($this->idKey) && $id_key == 'id' ? $this->idKey : $id_key; return $this->getAllByMutiple($field, null, array($id_key => $sort), null, null, $table_name); } /** * 复杂的单表查询接口 * * @param array $map * 查询条件 eg. array('field1'=>'11','field2'=>array('value1','value3'),'field3'=>array('_logic'=>'>=','value'=>1) ); * @param array / string $fields * 查询字段 eg. (1)array('字段1','字段2') (2) '字段1,字段2' * @param array $orderby * 排序条件 eg. array('id'=>'asc','appid'=>'desc') * @param array / int $limit * 限制查询数量 eg. (1)array(0,10) (2)10 * @param array / string $groupby * Group条件 eg (1)array('sid','pid') (2)pid * @param string $table_name * @return array */ public function getAllByMutiple($map = array(), $fields = array(), $orderby = array(), $limit = array(), $groupby = array(), $table_name = null) { !$table_name ? $table_name = $this->table_name : null; $fields = $this->buildFields($fields); $sql = 'SELECT ' . $fields . ' FROM `' . $table_name . '` '; $sql .= $this->buildWhere($map); $sql .= $this->buildGroupBy($groupby); $sql .= $this->buildOrderBy($orderby); $sql .= $this->buildLimit($limit); return $this->queryAll($sql); } /** * 生成字段字句 * * @param mixed(array,string) $fields 字段 * @param string $tag 数据库表标识名 * @return string */ public function buildFields($fields, $tag = '') { $tag = $tag ? $this->dao->db->build_escape($tag, 1) . '.' : ''; if (empty($fields)) { return ' ' . $tag . '* '; } else if (is_array($fields)) { $temp = array(); foreach ($fields as $k => $v) { $temp [] = $tag . $this->dao->db->build_escape($v, 1); } return implode(',', $temp); } else { return $fields; } } /** * 获取数据库连接(多数据库) * @return dbInit */ protected function getDb() { return !empty($this->dbType) ? $this->init_db($this->dbType) : $this->init_db('default'); } /** * Sql语句查询,获取全部记录 * @param string $sql * @return array / bool */ public function queryAll($sql) { $result = $this->getDb()->query($sql, false); if (!$result) { return false; } $arr = array(); while ($row = $this->getDb()->fetch_assoc($result)) { $arr [] = $row; } return $arr; } /** * 生成LIMIT字句 * * @param array / int $limit 限制数 eg. (1)array(0,10) (2)10 * @return string */ public function buildLimit($limit) { if (empty($limit)) { return ''; } if (is_array($limit)) { return isset($limit [1]) ? ' LIMIT ' . intval($limit [0]) . ',' . intval($limit [1]) : ' LIMIT ' . intval($limit [0]); } else { return ' LIMIT ' . intval($limit); } } /** * 生成ORDER BY字句 * * @param array $orderby array('field'=>'desc'); * @param string $tag 数据库表标识名 * @return string */ public function buildOrderBy($orderby, $tag = '') { if (!is_array($orderby) || empty($orderby)) { return ''; } $tag = $tag ? $this->dao->db->build_escape($tag, 1) . '.' : ''; $temp = array(); foreach ($orderby as $key => $val) { $temp [] = $tag . $this->dao->db->build_escape($key, 1) . ' ' . ($val == 'desc' ? 'desc' : 'asc'); } return ' ORDER BY ' . implode(',', $temp); } /** * 生成GROUP BY字句 * * @param mixed(array,string) $groupby 字段 * @param string $tag 数据库表标识名 * @return string */ public function buildGroupBy($groupby, $tag = '') { if (empty($groupby)) { return ''; } $tag = $tag ? $this->dao->db->build_escape($tag, 1) . '.' : ''; if (is_array($groupby)) { foreach ($groupby as $key => $val) { $groupby [$key] = $tag . $this->dao->db->build_escape($val, 1); } return ' GROUP BY ' . implode(',', $groupby); } else { return ' GROUP BY ' . $this->dao->db->build_escape($tag . $groupby, 1); } } /** * 生成WHERE子句 * * @param array $map * array('field1'=>'11','field2'=>array('value1','value3'),'field3'=>array('_logic'=>'>=','value'=>1) ); * @param string $tag 数据库表标识名 * @return string */ public function buildWhere($map, $tag = '') { if (!is_array($map) || empty($map)) { return ''; } $temp = array(); foreach ($map as $k => $v) { if (is_array($v)) { if (!empty($v ['_link'])) { $link = $v ['_link']; unset($v ['_link']); $str = $this->buildWhereWithLink($v, $link, $tag); !empty($str) ? $temp [] = ' ( ' . $str . ' ) ' : null; } else { $temp [] = $this->buildWhereWithLink(array( $k => $v ), 'AND', $tag); } } else { $temp [] = $this->buildWhereWithLink(array( $k => $v ), 'AND', $tag); } } return ' WHERE ' . implode(' AND ', $temp); } /** * 通过字段查询获取第一条记录 * * @param array $data * @param string $table_name * @return array */ public function getOneByField($data = array(), $table_name = null) { ! $table_name ? $table_name = $this->table_name : null; return $this->init_db()->get_one_by_field($data, $table_name); } /** * 更新(基于ID) * @param int $id * @param array $data * @param string $table_name * @return int */ public function update($id, $data, $table_name = null) { if (!$table_name) { $table_name = $this->table_name; $data = $this->dao->db->build_key($data, $this->fields); } return $this->init_db()->update($id, $data, $table_name); } /** * 更新(基于其他字段) * @param array $data * @param array $field * @param string $table_name * @return int */ public function updateByField($data, $field, $table_name = null) { if (!is_array($field)) { return false; } if (!$table_name) { $table_name = $this->table_name; $data = $this->dao->db->build_key($data, $this->fields); } return $this->init_db()->update_by_field($data, $field, $table_name); } }