В 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, а затем занять несколько минут чтения документации и узнать его хорошо , Выполнение ужасных хаков не поможет никому и особенно вам, потому что у вас появятся ошибки и грязный код.
Какой язык является вашим кодом (отметьте его соответствующим образом?) – david
'Мне нужно сохранить два значения в одном столбце' Не делайте этого. Вместо этого используйте два столбца. Каждая колонка должна соответствовать одной и только одной части информации. –
и хранение массивов эффективно выполняется при хранении массива в строках. – Miki