2014-10-03 6 views
-2

동일한 열에 두 개의 값을 저장해야합니다. 이것은 하이픈으로 구분 된 코드와 이름입니다. 이 배열을 사용하여 어떻게이 작업을 수행 할 수 있습니까? 배열을 MySQL에 저장하십시오.

'name'=> $data['code']['name']

나는 직렬화에 대해 읽어,하지만 난 여기를 구현하는 방법을 볼 수 없습니다.

public function addProduct($code, $name, $photo, $data = array()) 
    {   
     if($photo == NULL) { 
      // Product data 
      $productData = array(
       'code'     => $data['code'], 
       'name'     => $data['name'], 
       'category_id'   => $data['category_id'], 
       'subcategory_id'  => $data['subcategory_id'], 
      ); 
     } else { 
      // Product data 
      $productData = array(
       'code'     => $data['code'], 
       'name'     => $data['name'], 
       'category_id'   => $data['category_id'], 
       'subcategory_id'  => $data['subcategory_id'], 
       'image'     => $photo 
      ); 
     } 

     if($this->db->insert('products', $productData)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+2

코드에 어떤 언어가 들어 있습니까? (적절하게 태그를 달았습니까?) – david

+5

'같은 값으로 두 값을 저장해야합니다. 그러지 마세요. 대신에 두 개의 열을 사용하십시오. 각 열은 하나의 정보에만 대응해야합니다. –

+0

및 어레이 저장은 어레이를 행에 저장할 때 효율적으로 수행됩니다. – Miki

답변

0

, 난 당신이 원하는 생각 unserialize(). JSON을 사용하면 JavaScript와 같은 다른 언어로 해독 할 수 있다는 장점이 있지만 seialize()는 PHP 관련 함수입니다.

+0

아 델피 아 (Adelphia) 이것은 내가 원하는 것을 정말로합니다! 이제 조인을 포함하기 때문에 데이터를 검색 할 때 다른 문제를 다루고 있습니다 ... 해당 문제를 해결할 시간입니다. 감사! – gatuso

0

데이터베이스에 데이터를 삽입하는 두 가지 방법이 CodeIgniter에 있습니다.

첫번째 방법 : 일반 SQL 쿼리

public function addProduct($code, $name, $photo, $data = array()){   
    $sql = ""; 
    if($photo == null){ 
     // Product data 
     $d_code = isset($data['code']) ? $this->db->escape($data['code']) : ''; 
     $d_name = isset($data['name']) ? $this->db->escape($data['name']) : ''; 
     $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : ''; 
     $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : ''; 
     $sql = "INSERT INTO mytable (code, name, category_id, subcategory_id) "; 
     $sql .= "VALUES ('" . $d_code . "', '" . $d_name . "', '" . $d_category_id . "', '" . $d_subcategory_id . "')"; 
    } else { 
     // Product data 
     $d_code = isset($data['code']) ? $this->db->escape($data['code']) : ''; 
     $d_name = isset($data['name']) ? $this->db->escape($data['name']) : ''; 
     $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : ''; 
     $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : ''; 
     $d_image = isset($photo) ? $this->db->escape($photo) : ''; 
     $sql = "INSERT INTO mytable (code, name, category_id, subcategory_id, image) "; 
     $sql .= "VALUES ('" . $d_code . "', '" . $d_name . "', '" . $d_category_id . "', '" . $d_subcategory_id . "', '" . $d_image . "')"; 
    } 
    $this->db->query($sql); 
    if($this->db->affected_rows() > 0){ 
     return true; 
    } else { 
     return false; 
    } 
} 

두번째 방법 : 두 가지 방법으로 당신이이 것을 염두에 액티브

public function addProduct($code, $name, $photo, $data = array()){   
    if($photo == null){ 
     // Product data 
     $d_code = isset($data['code']) ? $this->db->escape($data['code']) : ''; 
     $d_name = isset($data['name']) ? $this->db->escape($data['name']) : ''; 
     $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : ''; 
     $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : ''; 
     $dataArr = array(
      'code' => $d_code, 
      'name' => $d_name, 
      'category_id' => $d_category_id, 
      'subcategory_id' => $d_subcategory_id 
     ); 
    } else { 
     // Product data 
     $d_code = isset($data['code']) ? $this->db->escape($data['code']) : ''; 
     $d_name = isset($data['name']) ? $this->db->escape($data['name']) : ''; 
     $d_category_id = isset($data['category_id']) ? $this->db->escape($data['category_id']) : ''; 
     $d_subcategory_id = isset($data['subcategory_id']) ? $this->db->escape($data['subcategory_id']) : ''; 
     $d_image = isset($photo) ? $this->db->escape($photo) : ''; 
     $dataArr = array(
      'code' => $d_code, 
      'name' => $d_name, 
      'category_id' => $d_category_id, 
      'subcategory_id' => $d_subcategory_id, 
      'image' => $d_image 
     ); 
    } 
    $this->db->insert('mytable', $dataArr); 
    if($this->db->affected_rows() > 0){ 
     return true; 
    } else { 
     return false; 
    } 
} 

노트

유지 MySQL 데이터베이스의 정확한 구조. 그렇지 않으면 "열을 찾을 수 없습니다"등의 오류가 발생합니다.

한편으로는 MySQL에 배열을 저장할 수 없지만 쉼표로 구분 된 값 (CSV) 문자열을 저장할 수 있습니다 권장 사항 :

$dataArr = array(
    $d_code, 
    $d_name, 
    $d_category_id, 
    $d_subcategory_id 
); 
$csv = implode(",", $dataArr); 

제공된 데이터 중 하나라도 쉼표가 포함되어있는 경우 문제가 발생합니다. 당신은 MySQL의 행의 CSV를 저장 안되는 이유

:

정보의 모든 조각 치료 자체에 저장해야
  • .
  • 데이터를 검색하는 것은 MySQL을 사용하여 불가능합니다.
  • "색인 생성"을 잊어 버리십시오. 이 경우에는 쓸모가 없습니다. 또한 쿼리 최적화를 잊어 버리십시오.
  • 정보의 특정 부분을 찾으려면이 테이블의 모든 테이블을 쿼리하고이 정보를 반복하여 원하는 데이터를 얻어야합니다.
  • 개발자는 귀하의 이동을 이해하지 못합니다.
  • 확실히 CodeIgniter, 특히 ActiveRecord 메서드에서 문제가 발생할 것입니다.
  • 는 CodeIgniter의에서 데이터베이스에서 정보를 삭제// 업데이트를 선택/삽입하기 정말 쉽습니다 : 당신이 CodeIgniter를 위해 최선을 다하고 처음 인 경우에 link
  • 은 다음 문서를 읽고 몇 분 정도 걸릴하고 학습을 . 끔찍한 해킹을하는 것은 누군가와 특히 당신을 도우 려하지 않을 것입니다. 왜냐하면 여러분은 버그와 지저분한 코드로 끝날 것이기 때문입니다.그런 다음
    'name' => serialize(array('code'=>$data['code'], 'name'=>$data['name'])) 
    

    는 단순히

    $data = unserialize($res['name']); 
    echo $data['code']."-".$data['name']; 
    

    또한 serialize()의 루에서 json_encode()json_decode()를 사용할 수있는 수를 검색하고 : 만약 내가 제대로 이해하고

+0

감사합니다. Wissam El-Kik! 충분한 명성을 얻지 못했지만 설명에 감사드립니다. 안부 인사 – gatuso

관련 문제