Я использую поле бит (1) для хранения логических значений и записи в таблицу с помощью подготовленных инструкций PDO.PDOstatement (MySQL): вставка значения 0 в бит (1) поле приводит к 1, записанному в таблице
Это тестовая таблица:
CREATE TABLE IF NOT EXISTS `test` (
`SomeText` varchar(255) NOT NULL,
`TestBool` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
Это тестовый код:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
Запуск этого кода дает мне строку со значением 1 в TestBool. И то же самое, используя bindValue() и bindParm(). Я также попробовал названные заполнители (вместо?) С тем же результатом.
Тогда я попробовал:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
который работал должным образом (TestBool имеет значение 0). Также работает штамповка в SQL непосредственно в MySQL.
Обратите внимание, что вставка 1 всегда работает.
Так почему же заполнители не вставляют значение 0? (и как я на самом деле это делаю?)
Вы уже используете PDO, это хорошо. Почему бы вам не воспользоваться преимуществами названной функции заполнителей PDO? См. Учебное пособие: http://www.phpeveryday.com/articles/PDO-Positional-and-Named-Placeholders-P551.html –
Для этого вопроса я попробовал, и это не имеет значения. Для общего запроса есть ли какое-то преимущество в использовании его другого удобства? (Это часть DAL, поэтому она будет генерироваться в любом случае) – Peter
Да, вам не нужно запоминать порядок ваших переменных. Вы увеличиваете абстракцию кода. –