【问题标题】:Codeigniter active record/ update only one row in tableCodeigniter 活动记录/仅更新表中的一行
【发布时间】:2013-01-18 07:58:37
【问题描述】:

大家好,我有以下模型,其中包含需要更新的字段:

public function admin_add_review( $review = array()){

            $data = array(

                'title' => $review['title'],
                'description' => $review['description'],
                'category' => $review['category']
            );


            $query = $this->db->update('reviews', $data);

                if( $query){
                    return true;
                }else{
                    return false;
                }

    }

和下面的控制器,这里我只是将数据发送到视图。

public function admin_validation()
    {
        $this->load->library('form_validation');
        $this->load->model('model_users');

        $review['title'] = $this->input->post('title');
        $review['description'] = $this->input->post('description');
        $review['category'] = $this->input->post('category');
        $this->model_users->admin_add_review( $review );



        $this->load->view('admin_page', $review);

    }

和以下视图。这是从控制器获取数据的表格,当我更新此数据时,它会更新具有相同描述的孔表。

<?php   
                            $review = $review[0];

                            echo form_open_multipart('main/admin_validation');

                            echo validation_errors();


                            /*echo "<p> Id review</p>";
                            $data = array(
                                "name" => "id",
                                 "value" => $review['id']
                            );
                            echo form_input($data);*/ 

                            echo "<h3>Title: ";                            
                            echo "</h3>";

                            $data = array(
                                "name" => "title",
                                 "id" => "title-input",
                                 "value" => $review['title']
                            );
                            echo form_input($data);


                            echo "<h3>Category: ";                            
                            echo "</h3>";
                            $data = array(
                                "name" => "category",
                                 "id" => "category-input",
                                 "value" => $review['category']

                            );  

                            echo form_input($data);


                            echo "<h3>Description: ";
                            echo "</h3>";
                            $data = array(
                              "name" => "description",
                              "id" => "description",
                              "value" => $review['description']

                            );

                            echo form_textarea($data);

                            echo "<br/>";
                            echo "<br/>";

                            echo form_submit('login_submit', 'Update review.');
                            echo form_close();              
            ?> 

     When i press the update button it updates all my database table rows! and i just want only the specified one to be updated. Help please. 

【问题讨论】:

  • 这只是 sql 逻辑而不是整个框架
  • 更新单行的sql逻辑,就是每行都有一个唯一的标识符。所以你最终只能更新 1 行而不是很多。

标签: php codeigniter


【解决方案1】:

如果要更新数据库中的现有记录,则需要将 where 子句传递给 php 函数,例如:

public function admin_add_review($value, $review = array()){

            $data = array(

                'title' => $review['title'],
                'description' => $review['description'],
                'category' => $review['category']
            );

            $this->db->where('key', $value);
            $query = $this->db->update('reviews', $data);

                if( $query){
                    return true;
                }else{
                    return false;
                }

    }

因此,$value 标准可以是现有评论的 id,例如 review_id 或其他任何内容。

事件更好:

$query = $this->db->update('reviews', $data, array('review_id' => $value));
//$query = $this->db->update(TABLE, NEW_DATA, CRITERIA);  

因此,如果您的条件匹配表中的 1 行,则只会更新 1 行。

【讨论】:

  • 应该补充一点,如果表没有唯一 ID,则您可能会更新多个记录,除非有其他字段可以组合以创建唯一选择器。我知道你的回答暗示了这一点,但它没有明确说明,我觉得这个人是数据库新手。
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多