Вам необходимо явно объявить этот параметр как Boolean при передаче его в PDO.
Из PDO execute
документация :
input_parameters
Массив значений с таким количеством элементов, сколько связанных параметров в выполняемой инструкции SQL.Все значения обрабатываются как PDO::PARAM_STR
.
Это не то, что вам нужно.
Поэтому вам нужно будет изменить логику, чтобы избежать использования конструкции execute(array())
и связывать каждуюпараметр по отдельности, используя bindValue()
.Для логического значения:
$insertstmt->bindValue(':col6', false, PDO::PARAM_BOOL);
Поскольку логические значения в MySQL равны TINYINT(1)
, PDO::PARAM_INT
также должно нормально работать:
$insertstmt->bindValue(':col6', 0, PDO::PARAM_INT);
Наконец: если это логическое значение будетвсегда быть ложным, тогда вы можете передать его непосредственно в запрос, например:
$insertstmt->execute(array($var1, $var2, $var3, $var4, $var5, false));
Как мудро прокомментировано spencer7593 , другой вариант - выполнить приведение типа изнутриSQL.Например, можно преобразовать строку в битовое значение с помощью:
INSERT INTO table1 (column1, column2, column3, column4, column5, column6)
VALUES (?, ?, ?, ?, ?, IF( ? ='0', b'0', b'1') )