CodeIgniter中实现条件判断后插入数据需先业务校验再执行insert(),包括存在性校验、动态字段构造、多条件组合判断及事务保障原子性。

CodeIgniter 中实现“条件判断后插入数据”的逻辑,核心是先做业务判断(比如是否存在、是否满足规则),再决定是否执行 insert()。下面给出几种常见场景的清晰写法。
判断记录是否存在再插入(避免重复)
常用于用户注册、唯一键约束场景,比如检查邮箱是否已存在:
// 检查 email 是否已存在
$email = $this->input->post('email');
$this->db->where('email', $email);
$query = $this->db->get('users');
<p>if ($query->num_rows() == 0) {
$data = [
'email' => $email,
'username' => $this->input->post('username'),
'created_at' => date('Y-m-d H:i:s')
];
$this->db->insert('users', $data);
echo "插入成功";
} else {
echo "该邮箱已存在";
}</p>根据表单值动态构造插入数据
例如:只有当用户勾选了“接收通知”才写入通知字段:
$data = [
'name' => $this->input->post('name'),
'phone' => $this->input->post('phone')
];
<p>// 条件添加字段
if ($this->input->post('subscribe') == '1') {
$data['notify'] = 1;
$data['notify_time'] = date('Y-m-d H:i:s');
}</p><p>$this->db->insert('contacts', $data);</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/ai/4111" title="Exa AI"><img
src="https://img.php.cn/upload/ai_manual/001/246/273/178599605861507.png" alt="Exa AI" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/ai/4111" title="Exa AI" class="overflowclass">Exa AI</a>
<p class="overflowclass">Exa AI是一款AI图像与设计工具,专门为AI模型设计的搜索引擎平台。</p>
</div>
<a rel="nofollow" href="/ai/4111" title="Exa AI" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>多条件组合判断后插入(如权限+状态校验)
适合后台操作,例如:仅管理员且订单未处理时才允许补录物流单号:
$user_role = $this->session->userdata('role');
$order_id = $this->input->post('order_id');
$tracking_no = $this->input->post('tracking_no');
<p>// 多条件判断
if ($user_role === 'admin') {
$this->db->where('id', $order_id);
$this->db->where('status', 'pending'); // 仅待处理订单
$order = $this->db->get('orders')->row();</p><pre class="brush:php;toolbar:false;">if ($order) {
$log_data = [
'order_id' => $order_id,
'tracking_no' => $tracking_no,
'added_by' => $this->session->userdata('id'),
'added_at' => date('Y-m-d H:i:s')
];
$this->db->insert('shipping_logs', $log_data);
echo "物流信息已录入";
} else {
echo "订单不可操作(已发货或不存在)";
}} else { echo "权限不足"; }
使用事务保证条件与插入的原子性
当判断和插入需强一致性(如扣库存+下订单),务必加事务:
$this->db->trans_start();
<p>// 1. 查询库存
$this->db->where('product_id', $pid);
$stock = $this->db->get('products')->row()->stock;</p><p>// 2. 判断是否足够
if ($stock >= $buy_count) {
// 3. 扣减库存
$this->db->set('stock', 'stock - ' . (int)$buy_count, FALSE);
$this->db->where('product_id', $pid);
$this->db->update('products');</p><pre class="brush:php;toolbar:false;">// 4. 插入订单
$order_data = ['pid'=>$pid, 'qty'=>$buy_count, 'time'=>date('Y-m-d H:i:s')];
$this->db->insert('orders', $order_data);} else { $this->db->trans_rollback(); echo "库存不足"; return; }
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) { echo "操作失败,请重试"; } else { echo "下单成功"; }










