Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Einführung in die Methode zum Umschreiben von Einfügungen mit Codeigniter

Detaillierte Einführung in die Methode zum Umschreiben von Einfügungen mit Codeigniter

黄舟
Freigeben: 2023-03-06 21:20:02
Original
1170 Leute haben es durchsucht

Der folgende Editor bringt Ihnen einen Artikel darüber, wie Sie Codeigniter zum Umschreiben von Einfügungen verwenden (empfohlen). Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf

Die Lösung beim Einfügen von Daten mithilfe des Codeiginter-Frameworks hat einen eindeutigen Indexschlüsselwert

Speichern In den Daten gibt es einige eindeutige Indexfelder, die bereits Werte enthalten. Unsere übliche Lösung besteht darin, zuerst zu abzufragen, ob der Wert vorhanden ist das neue Aktualisierungsdatum, einfügen, falls es nicht existiert. Das Folgende ist eine Neufassung der Einfügemethode im Codeigniter--Modell , die die Schritte erheblich vereinfacht!

/**
 * 插入单条记录(Insert)
 *
 * @param array $params 插入字段及值数组
 * @param string $table 插入表名,未指定的场景插入主表
 * @param array $columns 插入表中所属字段名数组,若指定则按此进行过滤
 * @param array $updateColumns 若唯一键冲突时需要更新的列数组
 * @return mixed FALSE:没有插入的字段 int:插入记录id
 *
 * @throws \C_DB_Exception
 */
public function insert($params, $table = NULL, $columns = array(), $updateColumns = array())
{
  // 如果未指定表名,则认为对本Model层的主表进行操作
  if (empty($table)) {
    $table = $this->table;
    $columns = $this->columns;
  }
  // 过滤掉不属于该表中的字段
  if ( ! empty($columns)) {
    foreach ($params as $column => $val) {
      if (in_array($column, $columns)) {
        $row[$column] = $val;
      }
    }
  }
  // 不过滤
  else {
    $row = $params;
  }
  // 没有插入字段,直接返回
  if ( ! isset($row)) {
    return FALSE;
  }
  // 保证创建时间、更新时间必须设置
  if ( ! isset($row['create_at']) && in_array('create_at', $columns)) {
    $this->load->helper('common_function');
    $datetime = get_datetime();
    $row['create_at'] = $datetime;
    $row['update_at'] = $datetime;
  }
  // 封装SQL文,过滤不安全因素
  $sql = $this->db->insert_string($table, $row);
  // 若唯一键冲突时需要更新的列数组,则再次封装SQL文
  if ( ! empty($updateColumns)) {
    $updateValues = '';
    foreach ($updateColumns as $updateColumn) {
      if (isset($updateValues[0])) {
        $updateValues .= ',';
      }
      $updateValues .= $updateColumn . '=VALUES(' . $updateColumn . ')';
    }
    $sql = $sql . ' ON DUPLICATE KEY UPDATE ' . $updateValues;
  }
  // SQL执行
  $query = $this->db->query($sql);
  // SQL执行失败,抛出异常
  if (FALSE === $query) {
    $code = $this->db->_error_number();
    $msg = $this->db->_error_message();
    C_log::Error($code . ':' . $msg, $this->user_id, $sql, self::STATUS_DB_LOG);
    throw new C_DB_Exception('', C_DB_Exception::DB_ERR_CODE);
  }
  // SQL文写入DB日志
  if (LOG_UPDATE_SQL) {
    C_log::Info('', $this->user_id, $sql, self::STATUS_DB_LOG);
  }
  // 取得插入ID返回
  $id = $this->db->insert_id();
  return $id;
}
Nach dem Login kopieren
Wenn Sie SQL direkt schreiben, gibt es eine weitere Anweisung

Syntax:

INSERT INTO table VALUES () ON DUPLICATE KEY UPDATE row='$row'

Zum Beispiel:

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Methode zum Umschreiben von Einfügungen mit Codeigniter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage