예제 #1
0
 /**
  * 执行插入
  * @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();
 }