Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter:如果存在记录,则更新记录,然后插入新记录_Php_Mysql_Codeigniter - Fatal编程技术网

Php Codeigniter:如果存在记录,则更新记录,然后插入新记录

Php Codeigniter:如果存在记录,则更新记录,然后插入新记录,php,mysql,codeigniter,Php,Mysql,Codeigniter,在我的表中有四列 注册号 id(用户id) v_id(公司id) 比率 我所做的只是根据用户对公司(v_id)进行评分 假设,如果用户一为第一家公司(v_id)评分,同样,当同一用户为同一家公司评分时,费率列自动更新。如果user one希望对另一家公司进行评级,则会在表中添加新行。但就我而言 当同一用户再次对公司进行评分时,将在表中插入新行 型号 function ratings($data, $id, $v_id) { $query = $this->db->quer

在我的表中有四列

  • 注册号
  • id(用户id)
  • v_id(公司id)
  • 比率
我所做的只是根据用户对公司(v_id)进行评分

假设,如果用户一为第一家公司(v_id)评分,同样,当同一用户为同一家公司评分时,费率列自动更新。如果user one希望对另一家公司进行评级,则会在表中添加新行。但就我而言 当同一用户再次对公司进行评分时,将在表中插入新行

型号

function ratings($data, $id, $v_id)
{
    $query = $this->db->query("select r_id from user_ratings where id = $id and v_id = $v_id");
    if($query->num_rows() > 0)
    {
        $data['r_id'] = $query->row()->r_id;
        return $this->db
            ->where('id', $id)
            ->where('v_id', $v_id)
            ->update('user_ratings', $data);
    }
    else
    {
        return $this->db->insert('user_ratings', $data);
    }
}
我不知道我在这个模型中哪里做错了

function ratings($insert,$id,$update,$v_id) {
            // $this->db->where('id',$id);
            // $this->db->where('v_id',$v_id);
            // $run = $this->db->get('user_ratings');
            // if ($run->num_rows() >= 1) {
            //  $this->db->where('id',$id);
           // $this->db->update('user_ratings',$update);

        // }else {
        //  // $this->db->set('user_id', $id);
         // $this->db->insert('user_ratings',$insert);
        // }

        $query = $this->db->query('select id, v_id from user_ratings where id = "'.$id.'" and v_id = "'.$v_id.'"')->num_rows();

        if ($query > 0) {
            $this->db->query('update user_ratings set rate ="'.$update.'" where id = "'.$id.'"');
        }else {
            $this->db->insert('user_ratings',$insert);
        }
    } 
控制器

function ratings() {
            $id = $this->session->userdata('id');
            $v_id = $this->uri->segment(3);
            $insert= array (
                'rate' => $this->input->post('click_val'),
                'date' => date('Y-m-d H:i:s'),
                'v_id' => $this->input->post('company_id'),
                'id' => $this->input->post('id')
                );
            $update = array (
                'rate' => $this->input->post('click_val'),
                'date' => date('Y-m-d H:i:s'),

                );
            $this->Visa_mdl->ratings($value,$id,$update,$v_id);
        }
您已经输入了v_id列的静态值,请尝试将v_id=“2”替换为v_id=“.$v_id.”希望这对您有所帮助。

你的计划是正确的。这些简单的更改应该可以完成这项工作

型号

function ratings($data, $id, $v_id)
{
    $query = $this->db->query("select r_id from user_ratings where id = $id and v_id = $v_id");
    if($query->num_rows() > 0)
    {
        $data['r_id'] = $query->row()->r_id;
        return $this->db
            ->where('id', $id)
            ->where('v_id', $v_id)
            ->update('user_ratings', $data);
    }
    else
    {
        return $this->db->insert('user_ratings', $data);
    }
}
该方法返回true或false以指示结果

您的控制器经过修改,可用于上述功能

function ratings()
{
    $id = $this->session->userdata('id');
    $v_id = $this->input->post('company_id');

    $data = array(
      'rate' => $this->input->post('click_val'),
      'date' => date('Y-m-d H:i:s'),
      'v_id' => $v_id,
      'id' => $id
    );
    $this->Visa_mdl->ratings($data, $id, $v_id);
}

如果只使用未过滤的数据,为什么要使用框架?为什么不正确地使用SQL,并对EXISTS更新查询执行INSERT?以前我曾在EXISTS和UPDATE上执行INSERT,但是,正如我所问的,一个用户如何对两个不同的公司进行评级。不同等级。参数
$update
中有什么?
$update=array('rate'=>this->input->post('click_val'),'date'=>date('Y-m-d H:i:s')我问问题时忘记删除。但它仍然对我不起作用..谢谢,为什么你要放入$this->db->query('update user_ratings set rate=“”。$update。“”where id=“”。$id.”);在“仅更新单个条件”中,但在“选择”中,您放置了两个条件$this->db->query('select id,v_id from user_ratings,其中id=“.”.$id.”和v_id=“.”.$v_id.”“),请尝试保持这两个条件不变。我需要有关代码的更多帮助。。我不知道我写代码的方式是对还是错。也许我所有的代码都能正常工作,但我不满意。。你的建议会让我很感激的。你想让我解释一下它是如何工作的吗?我也看到了我要做的一个改变——我要做吗?不,我的意思是我只想知道我的代码是否有效。我该怎么想呢。我是说我怎么知道。我是否以正确的方式编写了所有代码。因为我是codeigniter的新手。好吧,如果你得到了你想要的结果,那么它就工作了。有时候你必须尝试很多不同的方法才能让它工作。当您遇到问题时,一次编写并测试几行。以小规模构建解决方案。几乎总是有几个“正确”的答案。一旦你找到了答案,寻找用更少的代码行来做同样的事情的方法。查看他人编写的代码有助于学习有效的编码。我发现在网上回答问题是一次很好的学习经历。阅读这里回答的问题并尝试理解那里发生了什么可能是有用的。CodeIgniter框架的文档()非常好,比大多数文档要好得多。另一个优秀的学习经验是检查Codeigniter的源代码。它位于安装的
系统
文件夹中。这是非常可靠的代码。阅读它是了解如何编写好代码以及如何使用框架的一个很好的方法。