在数据库的新行中插入几个不同的值数组

时间:2011-09-21 14:21:24

标签: php arrays codeigniter for-loop

我希望在数据库的行中插入值,因为每个值都放在数据库的新行中。

我不希望使用serialize(json_encode等)从数据库中插入所有值。

例如:(在这个例子中,我想要三次插入数据(值),因为我有3个值不同) 更新4:

这是我的价值:

<input name="name[0][]" value="11">
<input name="passport_number[0][]" value="11">


<input name="name[1][]" value="22">
<input name="passport_number[1][]" value="22">

我这样做,但没效果:

$name_input = $this->input->post('name');
$passport_number_input        = $this->input->post('passport_number');
//$term_passport_input = $this->input->post('term_passport');
//$date_of_birth_input       = $this->input->post('date_of_birth');
//$age_input        = $this->input->post('age');
//$national_number_input = $this->input->post('national_number');
//$mobile_input       = $this->input->post('mobile');
//$address_input        = $this->input->post('address');

$data = array();
foreach ($name_input as $idx => $name) {
    $data[] = array(
        'name' => $name_input[0]
        'passport_number' => $passport_number_input[0],
        //'term_passport' => $term_passport_input[$idx],
        //'date_of_birth' => $date_of_birth_input[$idx],
        //'age' => $age_input[$idx],
        //'national_number' => $national_number_input[$idx],
        //'mobile' => $mobile_input[$idx],
        //'address' => $address_input[$idx],
    );
};
var_dump($name_input);
$this->db->insert_batch('customer_info', $data);

这是var_dump输出'$ name_input':

array(2) {
    [0] = > array(1) {
        [0] = > string(2)"11"
    }[1] = > array(1) {
        [0] = > string(2)"22"
    }
}

我收到此错误:

  

遇到PHP错误
严重性:警告
消息:不能   修改标题信息 - 已经发送的标题(输出开始于   d:\ XAMPP \ htdocs中\应用\控制器\管理员\ tour_foreign.php:405)
  文件名:core / Common.php
行号:413

数据库   发生错误
错误编号:1054
'字段中的未知列'0'   列表'
INSERT INTO customer_info0)VALUES('22')
  文件名:D:\ xampp \ htdocs \ system \ database \ DB_driver.php
行   编号:330

1 个答案:

答案 0 :(得分:0)

更新3:每个更新的问题(更新4)
查看var_dump以下代码$name_input应该有效:

$name_input = $this->input->post('name');
$passport_number_input = $this->input->post('passport_number');

$data = array();
foreach ($name_input as $idx => $name) {
    $data[] = array(
        'name' => $name_input[$idx][0],
        'passport_number' => $passport_number_input[$idx][0]
    );
};
$this->db->insert_batch('customer_info', $data);

当POST输入作为array of arrays

传递时,还需要访问[0]元素

更新2: 看到问题是因为POST在代码MIGHT工作之后将数据作为另一个数组返回。我需要var_dump个POST输入($hi_input ..)来提供确切的代码。

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx][0],
        'hello' => $hello_input[$idx][0],
        'how' => $how_input[$idx][0]
    );
};
$this->db->insert_batch('table', $data);

以下代码应该可以正常运行(我没有安装CodeIgniter)。它不使用CodeIgniter来获取发布数据。

$hi_input    = $_POST['hi'];
$hello_input = $_POST['hello'];
$how_input   = $_POST['how'];

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx][0],
        'hello' => $hello_input[$idx][0],
        'how' => $how_input[$idx][0]
    );
}; 
$this->db->insert_batch('table', $data);

更新:
您也可以使用$this->db->insert_batch();执行此操作,如下所示:

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

$data = array();
foreach ($hi_input as $idx => $name) {
    $data[] = array(
        'hi' => $hi_input[$idx],
        'hello' => $hello_input[$idx],
        'how' => $how_input[$idx]
    );
};
$this->db->insert_batch('table', $data);

旧答案
有关插入的CodeIgniter文档 - http://codeigniter.com/user_guide/database/active_record.html#insert
声明$ data参数是一个关联数组,列名作为键,数据作为值插入。

所以你需要为每一行调用一次。因此
试试这个:

$hi_input    = $this->input->post('hi');
$hello_input = $this->input->post('hello');
$how_input   = $this->input->post('how');

foreach ($hi_input as $idx => $name) {
    $data = array(
        'hi' => $hi_input[$idx],
        'hello' => $hello_input[$idx],
        'how' => $how_input[$idx]
    );
    $this->db->insert('table', $data);
};