【问题标题】:check if name exists in database before adding using controller function php在使用控制器函数php添加之前检查数据库中是否存在名称
【发布时间】:2014-05-23 09:25:08
【问题描述】:

我有两个函数:checkDatabase($name)add。 第一个检查传递的名称是否已经在数据库中。下一个添加如果尚未在数据库中。这是我的代码:

public function checkDatabase($name) {
        $list = $this->data_model->getCommunityList();

        foreach ($list as $sites) {
            if ($sites->name == $name) {
                return $name;
            }
        }

        return false;       
}

public function add(){
        $names = $this->input->post('add-list');

        if ($names != '') {
            if (strpos($names, "\n") == TRUE ) { //newline found
                $names = $this->input->post('add-list');
                $namesArray = explode("\n", $names);

                foreach($namesArray as $name) {
                    $checker = "";
                    $checker = $this->checkDatabase($name);
                    if ($checker == $name) {
                        echo "<script type='text/javascript'>alert('A site in your list already exists. Duplicate sites are not allowed.');</script>";
                    }

                    else {
                        $this->data_model->addCommunity($name);
                    }
                }

                $this->index();
                redirect(base_url());
            }
         }
}

我的模特:

public function addCommunity($name){
        $names = $this->db->escape_str($name);

        $sql = "INSERT INTO community (name) VALUES ('$name');";

        $query = $this->db->query($sql);

        return $query;
}

我的桌子:

问题是我的函数仍然在数据库中添加名称,即使它已经存在。即使 SQL 表显示“唯一”,我的查询仍然接受我的输入。我的代码有什么问题?请帮忙!!!

【问题讨论】:

  • 我们能看到调用函数的代码吗?另外,您是否有创建表的 SQL 脚本以便我们查看约束?
  • 请分享你的模型
  • @Jenz 更新了问题
  • 这里:foreach ($list as $sites) { if ($sites->name == $name) { return $name; } }..please var_dump(sites->name,$name)

标签: php database codeigniter controller


【解决方案1】:

仅当记录不存在时才尝试插入。您可以在插入模型之前检查它,而不是为此调用另一个函数。

public function addCommunity($name){
        $names = $this->db->escape_str($name);
        $checkquery=$this->db->query("select * from community where name='$name'");
        if($checkquery->num_rows()==0)   // if there is no such a row then insert
        {
          $sql = "INSERT INTO community (name) VALUES ('$name')";
          $query = $this->db->query($sql);
          return $query;
       }
}

【讨论】:

    【解决方案2】:

    请用这种方法试试

    public function checkDatabase($name) {
        $this->db->select ( 'name' );
        $this->db->from ( 'community' );
        $this->db->like ( 'name', '$name' );
    
        $query = $this->db->get ();
    
        if ($query->num_rows () == 1) {
            $row = $query->first_row ();
            return $row->name;
        } else {
            return false;
        }
    
        return false;
    }
    

    【讨论】:

    • where 应该被使用而不是like
    • No.. 因为我们应该在数据库中的名称,您检查的方式会增加脚本的执行时间并检查 php 脚本列表中的每个名称,所以最好的做法是搜索数据库中的名称。
    • 假设我在名称表中有bira,如果我输入bir,它不会在数据库中添加bir,而是会给出echo "&lt;script type='text/javascript'&gt;alert('A site in your list already exists. Duplicate sites are not allowed.');&lt;/script&gt;";,但它不正确。它应该在数据库中添加bir
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多