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

例如:

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

这将以这种方式进入MySQL:
name (varchar)   is_awesome (tinyint)
Don              0

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

最佳答案

您不能在mysql中将truefalse添加到TINYINT中。你应该像这样做10

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

然后就在您将其提取时,将0视为false,将1视为true
更新:
您可以像下面这样创建一个名为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,无论是真假, Activity 和非 Activity ,或者仅通过传递$decode_set数组来解释。

关于codeigniter - CodeIgniter-在db中用 bool 值插入新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19017667/

10-14 01:51