2017-03-15 3 views
0

私は複数の選択ボックスから選択された項目で次の配列を持っています。IDに関連付けられた配列の各要素をcodeigniterを使用してデータベーステーブルに挿入します

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

私はidProveedor = 1のために、私が選択したすべての項目の配列値を挿入する必要があるので、次のような構造

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

でテーブルにこれらの値を挿入するには、「relacionproveedorfamilia」をしようとしています。

idProveedor   idFamilia 
1     1 
1     2 
1     ... 

ものは、それらがアレイ状に有している数字を異なるID番号を持っている「ファミリア」と呼ばれる別のテーブルに格納されている(ETCケーブル、PCR)アレイからの値です。私のコントローラで

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

、私はidProveedorのためのIDと配列$ nombresFamiliaを取得し、私はこれは私が私のモデルを持っている機能です

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

関数$ relacion_proveedorを呼び出します。最初に配列の文字列を使ってテーブル "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); 

は間違いなく私のモデル内の関数は、私はそれを修正することができるか、間違っていますか?

+0

なぜあなたは 'mysql_fetch_array'を使用していますか? –

+0

似たような質問がありました。私はそれを削除する必要がありますか?代わりに私は何を使うべきですか? – raptorandy

+0

https://www.codeigniter.com/user_guide/database/results.htmlをご覧ください。 –

答えて

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 
     )); 
    }  
} 
+0

これは魅力的な働きをしています。今後のクエリではこの点を念頭に置いていきます。ありがとう! – raptorandy

関連する問題