/** * 执行插入 * @param array 待插入的数据 * @param bool 多行返回插入的行数 * @return int 返回上次插入的id 或者 影响行数 */ protected final function insert(array $data, $rowCount = FALSE) { // 数据整理 $data = count($data) != count($data, COUNT_RECURSIVE) ? $data : array($data); // 设置插入的键 $this->sql['keys'] = array_keys($data[0]); // 设置插入的值 foreach ($data as $key => $insert) { $prepare = array(); foreach ($this->sql['keys'] as $prev) { $placeholder = ":{$prev}_{$key}"; // 占位符号 $prepare[] = $placeholder; $this->sql['values'][$placeholder] = array_shift($insert); } $this->sql['prepare'][] = sprintf("(%s)", implode(',', $prepare)); } // 预处理sql语句 $preKeys = sprintf("(`%s`)", implode('`,`', $this->sql['keys'])); // 插入对应的预处理值 $preValues = implode(',', $this->sql['prepare']); // 插入语句 $sql = "INSERT INTO {$this->table}{$preKeys} VALUES {$preValues}"; // 执行sql语句 $this->db->query($sql, $this->sql['values']); // 清空数据 $this->resetSql(); // 结果返回 return $rowCount ? $this->db->rowCount() : $this->db->lastInsertId(); }