在mysql的ONE字段中插入数组

时间:2010-02-01 05:37:48

标签: php mysql arrays

我想使用PHP在mysql数据库的一个字段中插入一个数组..

这很好用:

HTML:

anotherField :<input type="text"  name="anotherField" />

fax :<input type="text"  name="f[]" />
email :<input type="text"  name="f[]" />
phone :<input type="text"  name="f[]" />

PHP(我使用CodeIgniter框架):

<?php
    function addCustomRow($tableName)
    {

    $arr = $this->input->post('f');
    $field = implode("|", $arr);

        $data = array(
        'anotherField'          => $this->input->post('anotherField'),
        'field'             => $field
        );

        $this->db->insert($tableName, $data);
    }
?>

我在mysql中获取数据

fax|email|phone

但是......

我的问题是..我想在同一个领域中有很多数组..就像这样:

fax|email|phone :br: fax|email|phone :br: fax|email|phone ..

我试过这样的事情:

Html:

First array :
fax :<input type="text" class="inp" name="f[0][0]" />
email :<input type="text" class="inp" name="f[0][1]" />
phone :<input type="text" class="inp" name="f[0][2]" />

Second array :
fax :<input type="text" class="inp" name="f[1][0]" />
email :<input type="text" class="inp" name="f[1][1]" />
phone :<input type="text" class="inp" name="f[1][2]" />

PHP:

<?php
    function addCustomRow($tableName)
    {

    $arr = $this->input->post('f[]');
    $field = implode(":br:", $arr);

        $data = array(
        'anotherField'          => $this->input->post('anotherField'),
        'field'             => $field
        );

        $this->db->insert($tableName, $data);
    }
?>

但它说错了[严重性:通知消息:数组到字符串转换] 我在像这样的mysql中获取数据

array :br: array  

编辑:

我想这样做,因为我有一个分类表.. 每只猫都有自己的细节(字段)..所以当我添加新猫时,我只是做一些像这样的事情

       name of cat : <input type="text"  name="name" />

   <!-- Fields -->
    Fields //

    Field 1 :
    title of the filde : <input type="text"  name="f[0][0]" />
    type : <input type="text"  name="f[0][1]" /> <!-- 1= text , 2= select , 3= textarea ..  -->
    default value : <textarea rows="8" cols="20" name="f[0][2]"> </textarea> <!-- if select type write value1::value2::value3  ... -->



Field 2 :
title of the filde : <input type="text"  name="f[1][0]" />
type : <input type="text"  name="f[1][1]" /> <!-- 1= text , 2= select , 3= textarea ..  -->
default value : <textarea rows="8" cols="20" name="f[1][2]"> </textarea> <!-- if select type write value1::value2::value3  ... -->

Field 3 :
title of the filde : <input type="text"  name="f[2][0]" />
type : <input type="text"  name="f[2][1]" /> <!-- 1= text , 2= select , 3= textarea ..  -->
default value : <textarea rows="8" cols="20" name="f[2][2]"> </textarea> <!-- if select type write value1::value2::value3  ... -->

我可以在这里添加任意数量的字段..

在数据库中我想要像这样插入数据:

[nameOfBook|1|anyName :br: noOfPages|1|anyNo ]

和另一只猫这样的例如:

[colorOfcar | 2 | red :: black :: green:br:price | 1 | anyPrice]

任何帮助?

提前感谢..


@Justin Johnson

感谢您的回答,但它不起作用。 我必须使用$ data var来插入所有数据,但我用你这样回答

function addCustomRow($tableName)
{

    $data = array(
        'name'          => $this->input->post('name'),
        'fields'            => serialize($this->input->post('f[]'))
        );

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

我得到像这样的数据mysqyl(b:0;)!!

//

@Suku谢谢..我在问之前已经使用过它但是我不知道怎么样......我怎么能在我的情况下使用它呢? ..

@Alex

因为我有一个名为(类别)的表,每只猫都有自己的字段,如:

carsCat >
  type :
  color:
  details:

BooksCat >
nameOfbook:
writer:
numberOfpage:

等等.. 我发现这种方式可能是我最好的方式..任何建议?

5 个答案:

答案 0 :(得分:3)

要将数组存储在一个字段中,只需serialize即可。当您需要从数据库unserialize访问该数组时。

答案 1 :(得分:3)

首先,我建议你尝试normalize你的桌面计划多一点。在一个字段中存储多个,多个值将导致许多令人头疼的问题。也许,这样的事情:

alt text http://i50.tinypic.com/2heiwjb.jpg

在此方案中,contact_information表通过将ID(外部引用)存储到人员行而与person表相关联。这样,您可以为任何给定的人拥有尽可能多的联系人条目,而无需将数据数组塞入一个字段。


无论如何,为了解决您的问题,请在将数据插入数据库之前尝试序列化数据。

function addCustomRow($tableName) {    
    $data = array(
        'anotherField' => $this->input->post('anotherField'),
        'field'        => serialize($this->input->post('f[]'))
    );

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

编辑:已更新以解决评论。

答案 2 :(得分:2)

您可能需要使用serialize()和unserialize()函数,如下所示:

$string_from_array = serialize($array);

当你需要恢复数组时:

$array= unserialize($string_from_array);

有关详情,请参阅此处:http://www.wpfasthelp.com/insert-php-array-into-mysql-database-table-row-field.htm

答案 3 :(得分:0)

我用小技巧做到了:) 我只是添加一个heddin输入值(:br :),并保持所有输入的名称相等(f [])..像这样:

HTML:

field out of the array :
anotherField :<input type="text"  name="name" />

Field 1 :
title of the field : <input type="text"  name="f[]" />
type : <input type="text"  name="f[]" /> <!-- 1= text , 2= select , 3= textarea ..  -->
value : <textarea rows="8" cols="20" name="f[]"> </textarea> <!-- if select type write value1::value2::value3  ... -->
<input type="hidden" name="f[]" value=":br:" />

Field 1 :
title of the field : <input type="text"  name="f[]" />
type : <input type="text"  name="f[]" /> <!-- 1= text , 2= select , 3= textarea ..  -->
value : <textarea rows="8" cols="20" name="f[]"> </textarea> <!-- if select type write value1::value2::value3  ... -->
<input type="hidden" name="f[]" value=":br:" />

PHP:

function addCustomRow($tableName)
{
$arrF1 = $this->input->post('f');
$f = implode("|", $arrF1);

$data = array(
    'name'  => $this->input->post('name'),
        'fields'    => $f
    );

$this->db->insert($tableName, $data);

}

现在我在mysql中获取数据:

titleOffield|type|value|:brr:|titleOffield|type|value|:brr:

例如:

nameOfBook|1|writeTheName|:Br:|NoOfPages|1|value|:br:|

然后我可以像这样轻松地从mysql数据库返回数据: (我使用Smarty!)

<强>输出

  {assign var=fieldsBr value=":br:|"|explode:$r.values} <!-- exploade :br: -->

    {foreach from=$fieldsBr item=ff}
    {assign var=f value="|"|explode:$ff} <!-- exploade | -->
    {$f[0]} :  <b>{$f[2]}</b>  <br />  <!-- title of field :  the value  <br />  -->
    {/foreach}

**注意我在这里使用2爆炸一个用于(:br:|)而另一个用于(|)..

谢谢你的帮助..

艾哈迈德......

答案 4 :(得分:0)

将表格中的阵列值插入数据库

function addRecord($Table){
        global $connection; // database connection
        extract($Table);

        $entry_date = date('Y-m-d');

        for($i=0; $i< count($project_id); $i++)
        {

            $sql="INSERT INTO expenses(type_id,project_id,amount,exp_date,entry_date,comments,entry_name)
              values('$type_id[$i]','$project_id[$i]','$amount[$i]','$exp_date[$i]','$entry_date','$comments[$i]','$_SESSION[emp_name]')";

            $result=mysqli_query($conn,$sql);
        }