2016-03-21 116 views
3

我使用CodeIgniter 3和PostgreSQL 9.4數據庫。如果數據庫中相應列的數據類型是布爾值,有沒有辦法在PHP中獲取布爾值?從PostgreSQL獲取布爾值

我使用CodeIgniters查詢構建器類,如下所示:

$qry = $this->db->get_where('user', array('username' => mb_strtolower($username))); 
return $qry->row(); 

從用戶表中的所有布爾值由串(「T」和「F」)表示。

+0

請詳細解釋一下:如果布爾值爲'f',您是否需要返回0? – Vickel

+0

請參閱http://stackoverflow.com/a/31740990/1222135 – greg

回答

0

如果您使用布爾值,同時插入或更新數據,笨將它們轉換,但它不能做到這一點,同時獲取記錄,因爲它沒有它讀取數據類型的知識 - 這是一個查詢生成器,而不是一個ORM。

你可以做的是創建一堆類來表示你的特定結果集,並在獲取時使用custom_result_object() or custom_row_object()
顯然,真/假轉換的't'/'f'必須由這些定製對象執行。

1

要完成Narf的答案,這裏有一個泛型類轉換爲本機布爾php類型pgsql返回。請注意,這不是一個最佳解決方案,因爲它會將每個字符串「f」或「t」轉換爲布爾值,而不管Db中的列是否爲布爾值。

<?php 

class PgSqlObject 
{ 

    public function __set($name, $value) 
    { 
     if ($value === 'f') 
      $value = false; 
     elseif ($value === 't') 
      $value = true; 

     $this->$name = $value; 
    } 

    public function __get($name) 
    { 
     if (isset($this->$name)) 
     { 
      return $this->$name; 
     } 
    } 
} 


$this->db->query($sql)->custom_result_object('PgSqlObject'); 
1

有一個更好的解決辦法:用PDO驅動程序,如:

$db['default']['dsn']  = 'pgsql:host=localhost;dbname=base'; 
$db['default']['username'] = 'username'; 
$db['default']['password'] = 'password'; 
$db['default']['dbdriver'] = 'pdo'; 
$db['default']['port']  = 5432; 

那麼你的結果將是正確的類型postgre驅動程序(json_encode)

響應:

{ 
    "created_at": "2017-10-20 12:20:49", 
    "created_by": "82027609253", 
    "updated_at": "2017-10-20 12:20:49", 
    "updated_by": "82027609253", 
    "deleted": "f", 
    "id": "184", 
    "codigo_ibge": "1501402", 
    "uf": "PA", 
    "nome": "Belém" 
} 

在pdo驅動程序(json_encode)中的響應:

{ 
    "created_at": "2017-10-20 12:20:49", 
    "created_by": 82027609253, 
    "updated_at": "2017-10-20 12:20:49", 
    "updated_by": 82027609253, 
    "deleted": false, 
    "id": 184, 
    "codigo_ibge": 1501402, 
    "uf": "PA", 
    "nome": "Belém" 
}