用CodeIgniter插入语句 - 很困惑

时间:2011-10-15 05:02:52

标签: php mysql codeigniter

我在CodeIgniter上做得很好。我可以在我的MySQL数据库上执行SELECT语句,完全没有问题。但是,现在我正在尝试执行INSERT语句。

请注意,我还没有尝试过UPDATE语句。

阅读完文档后,我很困惑。

这就是我所拥有的:

contacts.php:

function add() {

    //echo "<pre>";print_r($_POST);

    $this->load->model('Contacts_model');
    $this->Contacts_model->insertContact($_POST);
}

contacts_model.php:

function insertContact($_POST) {

    //echo "<pre>";print_r($_POST);
    $title = $_POST['title']; // I can echo this here. It works
    $f_name = $_POST['f_name']; // I can echo this here. It works



    $sql = "INSERT INTO contacts (title,f_name) " .
        "VALUES (" .
        $this->db->escape($title) .
        "," .
        $this->db->escape($f_name) .
        ")";
    $this->$db->query($sql);
}

我读过有关Active Record的内容,但是如果这让我感到困扰,那么我仍然没有意识到我做错了什么。所有的例子看起来都像我的。

帮助?

修改

    $sql = "INSERT INTO contacts (title,f_name) VALUES ('$this->db->escape($title)','$this->db->escape($f_name)'";
    $this->$db->query($sql);

我也是这样试过的。还有很多其他的变种。它似乎不是我的语法......我想。

3 个答案:

答案 0 :(得分:4)

您的查询很好,只是为什么查询没有被执行的原因是您正在使用它:

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

没有像$ db这样的东西,只需使用它:

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

我确定这是问题,但如果不是,那么请将错误发布给它。感谢。

希望这有帮助。

答案 1 :(得分:1)

你错过了引用字符:

$title = $this->db->escape($title);
$fname = $this->db->escape($f_name)
$sql = "INSERT INTO contacts (title,f_name) " .
    "VALUES ('{$title}', '{$fname}')";
$this->db->query($sql);
BTW,$_POST变量到底是怎么回事?这是SuperGlobal variable之一。您不必在参数中传输它。您可以随时在脚本中的任何位置安全地调用它。

另一个注意事项,因为您使用CodeIgniter,所以最好查看Input class library并将其用于满足您的所有输入需求。

答案 2 :(得分:0)

Why send $_POST? Use $this->input->post("param_name") and in your instance "$this->load->model('Contacts_model');" in my practice i use "$this->load->model('Contacts_model','instance',[true or false]);" the last parameter is optional (to connect with the DB if you don't use autoload option).

Use this:

function insertContact() {
    $title = $this->input->post("title");
    $f_name = $this->input->post("f_name");
    $sql = "INSERT INTO contacts (title,f_name) " .
        "VALUES ('" . $this->db->escape($title) . "','".$this->db->escape($f_name) ."')";
    $this->$db->query($sql);
}


DON'T USE $_POST! (And use the Active Record read the user guide)