codeigniter的is_unique []如何工作

时间:2015-10-12 20:46:29

标签: php codeigniter

我检查了codeigniter的文档,但没有关于它的特殊页面或信息。我只想知道它是如何工作的。我有这个代码并且它正在工作!我想知道当没有任何模型或数据库访问时is_unique如何工作。在codeigniter中是否有任何类is_unique使用它来根据表的名称和您给它的字段等信息检索数据? 这就是代码:

视图中的电子邮件输入:

http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm

控制器:

echo form_input('email_address', set_value('email_address'), 'placeholder="Email"');

和她的模特:

function create_member()
    {
        $this->load->library('form_validation');

        // field name, error message, validation rules
        $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email|is_unique[membership.email]');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');

        $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');

        if($this->form_validation->run() == FALSE)
        {
            $this->load->view('pages/signup_form');
        }

        else
        {           
            $this->load->model('admin/Users_model');

            if($query = $this->Users_model->create_member())
            {
                $this->load->view('pages/signup_successful');           
            }
            else
            {
                $this->load->view('pages/signup_form');         
            }
        }

    }

1 个答案:

答案 0 :(得分:3)

您可以在以下位置找到此函数的源代码:system/libraries/Form_validation.php,它似乎是从系统类调用的唯一实例is_unique

代码:

    /**
     * Is Unique
     *
     * Check if the input value doesn't already exist
     * in the specified database field.
     *
     * @param   string  $str
     * @param   string  $field
     * @return  bool
     */
    public function is_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.]', $table, $field);
        return isset($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
            : FALSE;
    }

&#34;函数sscanf()是printf()的输入模拟。 sscanf()从字符串str读取并根据指定的格式对其进行解释,这在sprintf()的文档中有描述。&#34; - PHP Docs

正在运行sscanf()以将数据库与表名分开。

然后该函数检查数据库连接是否存在,选择参数中提供的表,并搜索表以返回该条目是否存在。使用三元运算符(?:),语法为boolean expression ? if true : if false;

希望有所帮助!