使用codeigniter将与ID关联的数组的每个元素插入到数据库表中

时间:2017-03-15 17:38:49

标签: php mysql codeigniter

我有以下数组,其中包含从多选框中选择的项目。

array (size=2)
    0 => string 'CABLES' (length=6)
    1 => string 'PCR' (length=3)

我试图将这些值插入到表格中,并且正在尝试将这些值插入表格中。具有以下结构

`idProveedor` int(11) NOT NULL,
`idFamilia` int(11) NOT NULL

因此,对于idProveedor = 1,我需要为所有选中的项插入数组值。

idProveedor         idFamilia
1                   1
1                   2
1                   ...

事情是数组中的值(CABLES,PCR等)存储在一个名为" familia"的不同表中。其中ID号与阵列中的号码不同。

id         clave        description
1          PCR          ...
2          CABLES       ...

在我的控制器中,我获取了idProveedor和数组$ nombresFamilia的ID,我调用了函数$ relacion_proveedor

$idProveedor = $this->Proveedormodel->get_idConsecutivo();
$nombresFamilia = $this->input->post('nombresFamilia');
$relacion_proveedor = $this->Proveedormodel->add_uk_proveedor_familia($idProveedor, $nombresFamilia);

这是我在模型中的功能。首先,我从表格#34; familia"中获取id值。使用数组中的字符串,而不是在表中插入值" relacionproveedorfamilia"。

function add_uk_proveedor_familia($id, $params){
    foreach($params as $clave){
        $valor = $this->db->query("SELECT id FROM familia WHERE clave= '$clave'");
        $vl = mysql_fetch_array($valor);
        $familia = $vl['id'];
        $this->db->query("INSERT INTO 'relacionproveedorfamilia' ('idProveedor', 'idFamilia') VALUES ('$id', '$familia')");
    }

}

当我尝试提交信息时,我收到警告信息:

Message: mysql_fetch_array() expects parameter 1 to be resource, object given
Filename: models/Proveedormodel.php
Line: $vl = mysql_fetch_array($valor);

我的模型中的函数肯定是错误的,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

CodeIgniter的$this->db对象会为您处理所有数据库内容。您不需要致电mysql_fetch_array()

function add_uk_proveedor_familia($id, $params){
    foreach($params as $clave){
        $valor = $this->db->query("SELECT id FROM familia WHERE clave= '$clave'");
        $vl = $valor->row_array();
        $familia = $vl['id'];
        $this->db->query("INSERT INTO 'relacionproveedorfamilia' ('idProveedor', 'idFamilia') VALUES ('$id', '$familia')");
    }    
}

(参见他们的文件:https://www.codeigniter.com/user_guide/database/index.html

建议您使用他们的"查询构建器" (之前称为"活动记录")类。手动将变量插入SQL查询只是询问是否有问题。

function add_uk_proveedor_familia($id, $params){
    foreach($params as $clave){
        $this->db->select('id')->from('familia')->where('clave', $clave);
        $valor = $this->db->get();

        $vl = $valor->row_array();
        $familia = $vl['id'];

        $this->db->insert('relacionproveedorfamilia', array(
            'idProveedor' => $id,
            'idFamilia' => $familia
        ));
    }    
}