Обновление типа данных mysql bit с использованием активной записи codeigniter - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть таблица с одним типом столбцов как BIT (1) Я использую активную запись codeigniter для выполнения запросов. Но настройка бита не работает. У кого-нибудь есть идеи о том, как это сделать? Или я должен вернуться к обычному запросу?

Ниже приведен фрагмент кода:

function itemUpdate($options=array()) {
if(isset($options['isAvailable']))
   $itemDB->set('isAvailable',$options['isAvailable']);
   $itemDB->where('id', $options['id']);
   $itemDB->update('Item');
}

Ответы [ 3 ]

3 голосов
/ 17 сентября 2010

Я часто использую:

$this->db->set('foo', (int) !empty($options['foo']));

Делает ответ 0/1 довольно надежным.

1 голос
/ 08 июля 2011

Я пробовал это с использованием платформы CakePHP 1.3.10 (PHP 5.2.9 | MySQL 5.1.33)

$decimal_value = hexdec(bin2hex($bin_value));

Работает как шарм!

0 голосов
/ 19 июня 2017

Я только что обнаружил это о Codeigniter, что построитель запросов Active Record автоматически добавляет одинарные кавычки вокруг значения, и что тип MySQL BIT не будет принимать одинарные кавычки вокруг значения.

Чтобы увидеть, что является фактически сгенерированным запросом, добавьте эту строку сразу после вашего запроса: echo $this->db->queries[0];

Вы также можете var_dump( $this->db );

Теперь вы увидите проблемус запросом, но это проблема, которая, я думаю, существует только потому, что вы пытаетесь установить тип данных BIT.

Итак, где это работает:

// Given that $options['isAvailable'] = 12 and $options['id'] = 2
UPDATE Item SET `isAvailable` = 12 WHERE id=2

Это не удается:

UPDATE Item SET `isAvailable` = '12' WHERE id=2

... и происходит сбой только потому, что ваш столбец isAvailable имеет тип BIT.

Выше @ phil-sturgeon дал нам ответ, но мы можем просто упростить его так:

$itemDB->set('isAvailable', (int) $options['isAvailable']);
$itemDB->where('id', $options['id']);
$itemDB->update('Item');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...