3

当 CodeIgniter 向数据库中插入一行时,它不会将 PHP 布尔值编码为 MySQL 需要的形式。

例如:

$new_record = array(
 "name" => "Don",
 "is_awesome" => true
);

这将像这样进入 MySQL:

name (varchar)   is_awesome (tinyint)
Don              0

有谁知道处理这个问题的好方法?我一直在写(is_awesome == true) ? 1 : 0;然后设置数组值,但这很糟糕。

4

2 回答 2

1

您不能在 mysql 中添加true或添加false到 a中。TINYINT你应该这样做10喜欢这个

$new_record = array(
"name" => "Don",
"is_awesome" => 1 //1 means it's true
);
$query = $this->db->insert('table_name', $new_record);

然后就在您获取它时考虑0asfalse1astrue

更新: 您可以创建一个tinyint_decode这样的函数:

public function tinyint_decode($result = array(), $decode_set = array())
{
 //$result is what you got from database after selecting
 //$decode_set is what you would like to replace 0 and 1 for
 //$decode_set can be like array(0=>'active', 1=>'inactive')
 //after fetching the array
 $result->is_awesome = ($result->is_awesome == 1 ? $decode_set[1] : $decode_set[0]);
return true;// or anything else

}

通过这种方式,您可以通过传递数组来解释任何您喜欢的东西01无论它是真还是假,活跃和不活跃,还是其他任何东西。$decode_set

于 2013-09-26T01:14:53.400 回答
0

MySQL 没有布尔值。我通常做的是:

1) Have a field of length char(1) and say 'Y' or 'N'

OR

2) Have a numeric field and say '1' or '0'

您提到的一种编码方法是唯一的方法。如果这是一个额外的步骤,我会去掉 PHP 代码本身中的布尔值并将其设为“1-0”或“YN”

于 2013-09-26T01:11:31.797 回答