从包含数组的 foreach PHP 插入数据

Posted

技术标签:

【中文标题】从包含数组的 foreach PHP 插入数据【英文标题】:insert data from foreach PHP containing an array 【发布时间】:2018-02-11 16:54:30 【问题描述】:

我正在使用 codeigniter 框架,但在尝试保存表单中的数据时遇到了一点问题。

如何为每个包含其他信息的 user_answer 插入新行?

谢谢!

这是我在控制器中的 foreach 循环和对模型的调用

foreach($_POST as $key => $val)  
          
            $data[$key] = $this->input->post($key);  
         
$this->quiz_model->save_answers($data);

这是模型

function save_answers($data)
    
            foreach ($data['user_answer'] as $key) 
                    $this->db->insert('answer', $data);
                   
    

表设置为

answer_id(自动递增) quiz_id question_id user_id user_answer

变量转储

data => array(3)  ["user_id"]=> string(9) "anonymous" ["quiz_id"]=> string(2) "24" ["question_id"]=> string(2) "18" ["user_answer"]=> array(3)  [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c"  

data['user_answers'] => array(3)  [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" 

错误

Error Number: 1054

Unknown column 'Array' in 'field list'

INSERT INTO `answer` (`user_id`, `quiz_id`, `question_id`, `user_answer`) VALUES ('anonymous', '24', Array)

【问题讨论】:

首先我会使用准备好的语句,这是codeigniter所没有的。我建议您在模型中使用 mysqli。您容易受到 sql 注入的攻击。 @Robert Rocha,只要他使用 db->插入他的“所有值都会自动转义,从而产生更安全的查询。”此外,您可以使用 PDO 和 mysqli 查询。根据 codeigniter 文档 【参考方案1】:

您在foreach 循环中有问题。将您的 save_answers 方法更改为:

function save_answers($data)

        foreach ($data['user_answer'] as $key=>$value)  //<------------change here
                $data_insert = array('user_id'=>$data['user_id'],'quiz_id'=>$date['quiz_id'],'question_id'=>$data['question_id'],'user_answer'=>$value); //create new array
                $this->db->insert('answer', $data_insert);//<------------change here
               

【讨论】:

【参考方案2】:

您应该为每个 user_answer 创建一组新数据。试试这个:

function save_answers($data)

        foreach ($data['user_answer'] as $key) 
                $new_data = array('user_id' => $data['user_id'], 'quiz_id' => $data['quiz_id'], 'question_id' => $data['question_id'], 'user_answer' => $key)
                $this->db->insert('answer', $new_data);
               

【讨论】:

这正是医生所要求的!

以上是关于从包含数组的 foreach PHP 插入数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP / MYSQL 插入数组 Foreach 循环

使用foreach数组使用php将多行插入mysql

如何在javascript中插入带有innerHTML的php数组

如何使用PHP将每个产品的ID,数量,标题,价格,类型从下面的数组插入数据库?

php使用foreach将值插入数组数组

PHP Foreach 大数据