Как вставить массив в ящик?

Как мне вставить массив в ящик?

Я использую последнюю версию Crate-PDO, но продолжаю получать это уведомление

Примечание: преобразование массива в строку в … / Crate / PDO / PDOStatement.php в строке 610

а также

Преобразование массива в строку в … / myPdoClass.php в строке 118

Я использую этот код:

$myArray = ['1', '2', '3', '4', '5'];

$db = new Database;
$db->Query("insert into tbl (id, arrayCol) values (?,?)");
$db->bind(1, '1');
$db->bind(2, $myArray);
$db->execute();

Любая помощь была бы отличной, спасибо

0

Решение

Чтобы связать любой нестроковый параметр, вы должны использовать метод PDO bindValue (), передавая требуемый тип в качестве 3-го параметра. Пример:

$statement->bindValue(2, [1, 2], PDO::PARAM_ARRAY)
2

Другие решения

Я не работал с Crate, но я бы сделал что-то вроде этого:

$myArray = ['1', '2', '3', '4', '5'];
$myArrayEncoded = json_encode($myArray);

$db = new Database;
$db->Query("insert into tbl (id, arrayCol) values (?,?)");
$db->bind(1, '1');
$db->bind(2, $myArrayEncoded);
$db->execute();

Когда вы позже извлекаете его из базы данных и хотите вернуть его обратно, как в первой строке, вы декодируете его:

$myArrayDecoded = json_decode($myArrayEncoded);

Может быть, есть лучшие решения от людей, которые на самом деле работали с этим, но я уверен, что это тоже должно сработать!

-1

РЕДАКТИРОВАТЬ: это быстрое исправление данной ошибки, а не способ хранения массивов.

Вы должны явно преобразовать ваш массив в строку. Простой способ сделать это:

$myString = "[" + implode(", ", $myArray) + "]";

Это даст вам строку "[1, 2, 3, 4, 5]"

Это пример, но у вас есть идея.

Документация по взлому

-1

использование

$statement->bindValue(2, [1, 2], PDO::PARAM_ARRAY)
-3