Ошибка при вставке массива и JSON в PostgreSQL с помощью Codeigniter 3.1.10

#postgresql #codeigniter #codeigniter-3

#postgresql #codeigniter #codeigniter-3

Вопрос:

Я работаю над проектом, который использует Codeigniter 3.1.10 framework и PostgreSQL в качестве базы данных. и я передаю значение формы из контроллера в модель следующим образом:

 $data = array(
   'field1' => $value1,
   'field2' => $value2,
   'field3' => $value3
)

$result = $this->modal->function_insert($data);
  

где значение 1 — строка, значение2 — массив, а значение3 — JSON. Я пытаюсь вставить данные в PostgreSQL. В таблице правильно определены типы данных, которые являются соответственно text, text[] и jsonb.
В модальном режиме мой код выглядит следующим образом:

 public function function_insert($data)
{
   $result = $this->db->insert('table_name', $data);
}
  

Я получаю следующую ошибку от codeigniter:

 Severity: Notice
Message: Array to string conversion
Filename: database/DB_driver.php
Line Number: 1471
Backtrace:
  

И запрос отображается следующим образом:

 INSERT INTO "table_name" ("field1", "field2", "field3") VALUES ('1', Array, Array)
  

Есть ли какая-либо проблема в моем коде, данных, которые я передаю в модель, или что-то еще.

Ответ №1:

Невозможно напрямую вставить массивы PHP в базу данных. Вам нужно выполнить некоторые трюки, подобные приведенным ниже примерам.

1. Для вставки PHP-массива в значение столбца Postgres типа Array

  $phpArray = [1,3,3];
 $pgColValue  = '{'.implode($phpArray,',').'}';
 echo $pgColValue;
 //outputs
 {1,3,3} // Treated as postgres array
  

2. Для вставки JSON. Используйте встроенное в PHP имя функции json_encode() для преобразования PHP массива в JSON строку.

 $phpArray = [1,3,3];
$pgColValue  = json_encode($phpArray);
echo $pgColValue;
//outputs
[1,3,3]