#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]