将值发布到MySQL数据库

时间:2016-04-10 11:11:25

标签: php mysql codeigniter

我正在尝试从表单中的字段插入mysql表中的数据。但是字段是动态分配的,这意味着名称是以编程方式设置的。以下是此

的示例
<?php for ($i=1; $i<=$nombre_parents_arr; $i++): ?>

<div class="form-group">
    <?php echo form_label('Nom' . " " . $i) ; ?>
    <?php
        $data = array(
            'class' => 'form-control',
            'name' => 'nom' . $i,
            'rows' => '3',
            'placeholder' => 'Merci de preciser les infos ici'
        );
    ?>
    <?php echo form_textarea($data); ?>
</div>

在我的模型中,我需要获取帖子并将它们存储在数据库中。我做了以下

public function fill_family(){
    $number = $this->input->post('number');
    $data = array(
        'user_id'       =>$this->session->userdata('user_id')
    );
    for($i=1; $i<=$number; $i++){           
        array_push($data, $this->input->post('nom' . $i));          
    } 
    $insert_data = $this->db->insert('temp', $data);
    //var_dump($data);
    return $insert_data;
}

单击表单上的提交时,我在浏览器中收到以下错误。

  

错误号码:1064

     

您的SQL语法有错误;查看与您的&gt; MySQL服务器版本对应的手册,以便在{0,1,2)值附近使用正确的语法(&#39; 42&#39;,&#39; samer1&#39;,& #39; samer2&#39;,&#39; samer3&#39;)&#39;在第1行

     

INSERT INTO tempuser_id,0,1,2)VALUES(&#39; 42&#39;,&#39; samer1&#39;,&#39; samer2&#39 ;,&gt;&#39; samer3&#39;)

我将表格中的列重命名为user_id,0,1和2,因为它在查询中生成,但仍然无效。

我的猜测是,它与不知道列的正确名称有关,所以我在for循环中的模型中做了这个

'nom' . $i => $this->input->post('nom' . $i);

但是我保留了与mysql相同的错误。任何人都可以向我提供我的错误所在的线索吗?

由于

2 个答案:

答案 0 :(得分:0)

更改您的查询

$q=0;
foreach($this->input->post('number') as $number) 
{
    if($number!='')
    {
        $data = array(
        "user_id" =>$this->session->userdata('user_id'),
        'nom' . $q =>$this->input->post('value_of_html_name_attribute ')[$q],
        'nom' . $q =>input->post('value_of_html_name_attribute ')[$q],
        'nom' . $q =>input->post('value_of_html_name_attribute ')[$q],
        );

        $this->db->insert('temp',$data);
    }

    $q++;   
}

希望这会奏效!

答案 1 :(得分:0)

INSERT INTO temp (user_id, 0, 1, 2) VALUES ('42', 'samer1', 'samer2', >'samer3')

如果您使用的是仅由数字组成的列名,则必须使用反引号引用它们。

INSERT INTO temp (user_id, `0`, `1`, `2`) VALUES ('42', 'samer1', 'samer2', 'samer3')`

<强>更新

请参阅MySQL Identifiers:“标识符可以以数字开头,但除非引用可能不仅仅包含数字。”