0

そのため、これをある程度デバッグしようとしましたが、なぜこれが起こっているのかわかりません。したがって、Excelファイルから情報を取得した後、データベースを作成しようとしましたが、ほとんどの場合これでうまくいきますが、苦労している2つの例外があります。まずは品番。"-" は挿入中に削除されます (例: sxrv-11 は sxrv11 になります)。

配列の var_dump の例を次に示します。

array(20) {
  ["stock_no"]=>
  float(127)
  ["part_no"]=>
  string(9) "SIFR6A-11"
  ["pop_code"]=>
  string(3) "D-N"
  ["jobber"]=>
  float(15.2)
  ["sell_out"]=>
  string(0) ""
  ["suggested_qty"]=>
  float(4)
  ["box_qty"]=>
  string(1) "1"
  ["case_qty"]=>
  float(120)
  ["description"]=>
  string(50) "LASER IRIDIUM SPARK PLUG / BOUGIE IRIDIUM AU LASER"
  ["individual_upc"]=>
  string(12) "087295101278"
  ["box_upc"]=>
  string(12) "087295001271"
  ["case_upc"]=>
  string(14) "10087295001278"
  ["part_status"]=>
  string(0) ""
  ["product_desc"]=>
  string(0) ""
  ["box_size"]=>
  string(0) ""
  ["fk_id_brand"]=>
  int(1)
  ["fk_id_category"]=>
  string(1) "1"
  ["fk_id_subcategory"]=>
  string(1) "5"
  ["description_en"]=>
  string(24) "laser iridium spark plug"
  ["description_fr"]=>
  string(23) "bougie iridium au laser"
}

これは、そのデータ配列を使用して挿入する挿入関数です。

public function insert_product($product)
{
    echo "<pre>";
    var_dump($product);
    echo "</pre>";
    $this->db->set('fk_id_category', $product['fk_id_category']);
    $this->db->set('fk_id_subcategory', $product['fk_id_subcategory']);
    $this->db->set('fk_id_brand', $product['fk_id_brand']);
    $this->db->set('stock_no', $product['stock_no']);
    $this->db->set('part_no', $product['part_no']);
    $this->db->set('pop_code', $product['pop_code']);
    $this->db->set('jobber', $product['jobber']);
    $this->db->set('part_status', $product['part_status']);
    $this->db->set('sell_out', $product['sell_out']);
    $this->db->set('suggested_qty', $product['suggested_qty']);
    $this->db->set('box_qty', $product['box_qty']);
    $this->db->set('case_qty', $product['case_qty']);
    $this->db->set('description_en', $product['description_en']);
    $this->db->set('description_fr', $product['description_fr']);
    $this->db->set('product_desc', $product['product_desc']);
    $this->db->set('box_size', $product['box_size']);
    $this->db->set('individual_upc', $product['individual_upc']);
    $this->db->set('box_upc', $product['box_upc']);
    $this->db->set('case_upc', $product['case_upc']);
    $this->db->insert('product');
}

データベースに入ると、前に説明した例に変更されます。さまざまな mysql 照合を試しましたが、何も変わりません。

これに関する最も奇妙な部分は、データベースに挿入されたときに「pop_code」が「-」を保持することです。それらは両方とも、それぞれ varchar() 20 と 5 です。

PHPの問題なのか、codeigniterの問題なのか、mysqlの問題なのか、phpmyadminの問題なのかわかりません。誰も手がかりを持っていますか?

4

2 に答える 2

0

Codeigniter のアクティブ レコード挿入 set()関数は、オプションの 3 番目のパラメーター ($escape) も受け入れます。これは、FALSE に設定されている場合にデータがエスケープされるのを防ぎます。違いを説明するために、ここでは set() をエスケープ パラメーターの有無にかかわらず使用しています。

これを試して :$this->db->set('part_no', $product['part_no'], FALSE);

于 2013-08-24T19:24:27.907 に答える