Как мне вставить массив в ящик?
Я использую последнюю версию 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();
Любая помощь была бы отличной, спасибо
Чтобы связать любой нестроковый параметр, вы должны использовать метод PDO bindValue (), передавая требуемый тип в качестве 3-го параметра. Пример:
$statement->bindValue(2, [1, 2], PDO::PARAM_ARRAY)
Я не работал с 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);
Может быть, есть лучшие решения от людей, которые на самом деле работали с этим, но я уверен, что это тоже должно сработать!
РЕДАКТИРОВАТЬ: это быстрое исправление данной ошибки, а не способ хранения массивов.
Вы должны явно преобразовать ваш массив в строку. Простой способ сделать это:
$myString = "[" + implode(", ", $myArray) + "]";
Это даст вам строку "[1, 2, 3, 4, 5]"
Это пример, но у вас есть идея.
использование
$statement->bindValue(2, [1, 2], PDO::PARAM_ARRAY)