我想循环查询的结果,然后将每个结果与输入字段进行比较,如果值重复,则必须返回false。如果不是,则结果为true。我知道我可以在数据库中使用唯一索引来避免重复的值,然后捕捉错误,但在这种情况下,重复的值是可能的,但它们不能都是"活动的"——有一列称为"状态",有两个值a或I(活动和非活动(,因此"clabe"值只能在一个活动,另一个不活动时重复。控制器:
function agregar()
{
$this->load->helper('date');
date_default_timezone_set('America/Mexico_City');
$now = date('Y-m-d H:i:s');
$Interno = $this->input->post('intern');
$clabe = $this->input->post('clabe2') . $this->input->post('control2');
$cve_banco = $this->input->post('cve_banco');
$Banco = $this->input->post('Banco2');
$Observaciones = $this->input->post('Observaciones');
$data = array(
'Interno' => $Interno,
'clabe' => $clabe,
'cve_banco' => $cve_banco,
'Banco' => $Banco,
'Observaciones' => $Observaciones,
'Fecha_alta' => $now,
);
if($this->consultas_M->insert($data) == true){
//redirect('Inicio/busqueda', 'refresh');
} else{
echo "Hubo un problema al insertar";
}
}
型号:
function insert($data)
{
$clabe = $this->input->post('clabe2') . $this->input->post('control2');
$this->db->select('Clabe');
$this->db->where('Status =', 'A');
$query= $this->db ->get('cuentas');
return $query->row();
foreach ($query as $row) {
$i = $row;
if ($clabe = $i) {
return false;
} else {
$this-> db -> insert('cuentas', $data);
if ($this->db->affected_rows() > 0) {
return true;
}
}
}
}
为什么要有可能重复的索引?如果出于某种原因想要不同的行有一个通用的"索引",可以创建一个名为index之类的列,并在WHERE子句中添加该索引。PS:在你的模型中foreach循环的if条件使用:
if ($clabe == $row){...
而不是
$i = $row
if ($clabe = $i){...
我自己解决了这个问题,我正在发帖,以防它对任何人都有帮助,这比我想象的要容易。
function insert($data, $clabe)
{
$Status = 'A';
$clabe = $this->input->post('clabe2') . $this->input->post('control2');
$this->db->select('Clabe');
$this->db->where('Status =', $Status);
$this->db->where('Clabe =', $clabe);
$q= $this->db ->get('cuentas');
if($q -> num_rows() > 0){
return false;
}else{
$this-> db -> insert('cuentas', $data);
return true;
}
这就是控制器:
if($this->consultas_M->insert($data, $clabe) == true){
redirect('Inicio/busqueda', 'refresh');
} else{
echo "There was a problem";
$this->load->view('errors/error');
}
我唯一需要做的和没有做的就是选择我想要的"clabe",然后将其与用户写这个"clabe"的输入进行比较。然后只是一个简单的if-else语句。
function insert($data)
{
$Status = 'A';
$clabe = $this->input->post('clabe2') . $this->input->post('control2');
$this->db->select('Clabe');
$this->db->where('Status', $Status);
$query= $this->db ->get('cuentas');
$flag=true;
foreach ($query as $row) {
$i = $row;
if ($clabe = $i){
$flag=false;
}
}
if($flag){
$this-> db -> insert('cuentas', $data);
if ($this->db->affected_rows() > 0) {
$flag= true;
}
}
return $flag;
}
您的代码将在第一个其他块广告返回时添加它。相反,它应该先检查所有的行来决定。