使用Codeigniter重写insert的方法(推荐)
发布时间:2020-12-12 22:04:17 所属栏目:PHP教程 来源:网络整理
导读:使用Codeiginter 框架插入数据时有唯一索引键值存在解决办法 对数据进行存储的时候,会有一些唯一索引的字段已经有值了,插入数据的时候会失败我们通常解决办法是先查询这个值是否存在,存在就跟新update,不存在就insert。以下是重写了Codeigniter 模型中的
使用Codeiginter 框架插入数据时有唯一索引键值存在解决办法对数据进行存储的时候,会有一些唯一索引的字段已经有值了,插入数据的时候会失败我们通常解决办法是先查询这个值是否存在,存在就跟新update,不存在就insert。以下是重写了Codeigniter 模型中的insert方法,极大的简化了步骤! 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('',self::STATUS_DB_LOG);
}
// 取得插入ID返回
$id = $this->db->insert_id();
return $id;
}
如果直接写SQL还有一种语句 语法: INSERT INTO table VALUES () ON DUPLICATE KEY UPDATE row='$row'举个例子: 以上这篇使用Codeigniter重写insert的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- php zlib压缩和解压缩swf文件的代码
- php PDO实现的事务回滚示例
- CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
- php – 教义2:实体可以保存到会话中吗?
- PHP利用func_get_args和func_num_args函数实现函数重载实例
- php – 从数字中查找数周和数天的月数
- PHP错误Parse error: syntax error, unexpected end of fil
- 调用未定义的方法DateTime ::在php中添加方法
- 使用Model-> find()(CakePHP)的相关模型中的条件
- PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)