2014-10-03 2 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

Если я правильно понимаю, я думаю, что вы хотите:

'name' => serialize(array('code'=>$data['code'], 'name'=>$data['name'])) 

Затем, чтобы получить его, вы можете просто

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

Вы также можете использовать json_encode() и json_decode() в Lou из serialize() и unserialize(). Преимущество использования JSON заключается в том, что вы можете декодировать его на других языках, таких как JavaScript, тогда как seialize() является специфичной для PHP функцией.

+0

Adelphia это действительно то, что я хочу! Теперь я имею дело с другой проблемой в получении данных, потому что она включает в себя ... Время, чтобы попытаться преодолеть эту проблему. Благодаря! – gatuso

0

В CodeIgniter есть 2 метода для вставки данных в базу данных.

первый метод: нормальный 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; 
    } 
} 

второй метод: ActiveRecord

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); 

Это решение вызовет проблемы, если какой-либо из предоставленных данных содержит запятую.

Почему вы не должны хранить CSV в строке MySQL:

  • каждая часть информации должна быть обработана и сохранена на своем собственном.
  • Поиск в данных будет невозможным с использованием MySQL.
  • забыть о «индексировании». В этом случае это бесполезно. Кроме того, забудьте о оптимизации запроса.
  • Вы ищете определенную информацию, тогда вам, вероятно, следует запросить всю таблицу и перебрать эту информацию, чтобы получить нужные данные.
  • ни один разработчик не поймет ваш ход.
  • это определенно вызовет проблемы с CodeIgniter, особенно в методах ActiveRecord.
  • это очень легко вставить/выбрать/обновление/удаление информации из базы данных в CodeIgniter: link
  • , если это первый раз, вы работаете на CodeIgniter, а затем занять несколько минут чтения документации и узнать его хорошо , Выполнение ужасных хаков не поможет никому и особенно вам, потому что у вас появятся ошибки и грязный код.
+0

Спасибо Wissam El-Kik! Я не могу голосовать, потому что у меня недостаточно репутации, но огромное спасибо объяснению! С уважением – gatuso