gpt4 book ai didi

php - Codeigniter:将额外参数插入到 MySQL 语句中

转载 作者:行者123 更新时间:2023-11-29 05:17:16 25 4
gpt4 key购买 nike

我有一个具有多个函数的模型,其中一个函数应该从多个表中删除与指定标签号匹配的一些记录。然而,当我将 MySQL 语句输出到错误日志时,我看到它添加了一些额外的参数,这些参数似乎是从模型中的另一个函数中获取的。这很奇怪,我终究无法弄清楚发生了什么。

函数如下:

function deleteEquipment() {
$tag = $this->uri->segment(3);
$this->db->where('tag', $tag);
$this->db->delete('equipment');
error_log('mysql: '.$this->db->last_query());
$this->db->where('tag', $tag);
$this->db->delete('process_record');
$this->db->where('tag', $tag);
$this->db->delete('hold');
$this->db->where('tag', $tag);
$this->db->delete('dpo');
error_log('mysql: '.$this->db->last_query());
return;
}

错误日志如下:

WHERE (archived<>'yes' AND (on_lot<>'yes' OR photographs_uploaded<>'yes') AND sold<>'yes') OR (archived<>'yes' AND sold='yes' AND (final_inspection<>'yes' OR jdlink2_registered<>'yes'))
AND `tag` = '40'
[24-Jun-2015 16:10:21 Europe/Berlin] mysql: DELETE FROM `process_record`
WHERE `tag` = '40'
[24-Jun-2015 16:10:21 Europe/Berlin] mysql: DELETE FROM `hold`
WHERE `tag` = '40'
[24-Jun-2015 16:10:21 Europe/Berlin] mysql: DELETE FROM `dpo`
WHERE `tag` = '40'

因此,最后三个语句看起来不错,但第一个语句中插入了所有这些额外参数。我看到这些参数的唯一其他地方是在同一模型中与分页相关的几个函数中,例如:

function getRowCount() {
// to do: edit this
$q = $this->db->get('equipment');
$where = "(archived<>'yes' AND (on_lot<>'yes' OR photographs_uploaded<>'yes') AND sold<>'yes') OR (archived<>'yes' AND sold='yes' AND (final_inspection<>'yes' OR jdlink2_registered<>'yes'))";
$this->db->where($where);
$rowcount = $q->num_rows();
return $rowcount;
}

我不知道为什么来自完全独立函数的参数会出现在第一个 MySQL 语句中。注意:同一模型中的另一个函数正在发生相同的事情:对三个单独的表进行一些更新,其中的行与标签号匹配。设备表查询引入了这个奇怪的东西,但其他查询看起来没问题。

知道为什么会这样吗?

最佳答案

Active Record 正在缓存 getRowCount 中的 WHERE,因为您调用的方法是乱序的。

当来自 getRowCountWHERE 仍在 Active Record 缓存中时,您的应用程序调用 deleteEquipment

function getRowCount() {
// move line below
// $q = $this->db->get('equipment');
$where = "(archived<>'yes' AND (on_lot<>'yes' OR photographs_uploaded<>'yes') AND sold<>'yes') OR (archived<>'yes' AND sold='yes' AND (final_inspection<>'yes' OR jdlink2_registered<>'yes'))";
$this->db->where($where);

// Active record will now clear the WHERE cache after executing get
$q = $this->db->get('equipment');
$rowcount = $q->num_rows();
return $rowcount;
}

关于php - Codeigniter:将额外参数插入到 MySQL 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31029129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com