Ошибка при вставке массива и JSON в PostgreSQL с использованием Codeigniter 3.1.10 - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над проектом, который использует платформу Codeigniter 3.1.10 и 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 Ответ

1 голос
/ 05 марта 2019

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

1. Для вставки PHP Array в значение столбца 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...