Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从PostgreSQL获取布尔值_Php_Postgresql_Codeigniter_Boolean - Fatal编程技术网

Php 从PostgreSQL获取布尔值

Php 从PostgreSQL获取布尔值,php,postgresql,codeigniter,boolean,Php,Postgresql,Codeigniter,Boolean,我正在使用CodeIgniter 3和PostgreSQL 9.4数据库。如果数据库中相应列的数据类型是布尔值,有没有办法在PHP中获取布尔值 我使用CodeIgniters查询生成器类,如下所示: $qry = $this->db->get_where('user', array('username' => mb_strtolower($username))); return $qry->row(); 用户表中的所有布尔值都由字符串('t'和'f')表示。否 如果您在

我正在使用CodeIgniter 3和PostgreSQL 9.4数据库。如果数据库中相应列的数据类型是布尔值,有没有办法在PHP中获取布尔值

我使用CodeIgniters查询生成器类,如下所示:

$qry = $this->db->get_where('user', array('username' => mb_strtolower($username)));
return $qry->row();
用户表中的所有布尔值都由字符串('t'和'f')表示。

如果您在插入或更新数据时使用布尔值,CodeIgniter将转换它们,但在获取记录时无法转换,因为它不知道读取的数据类型—它是查询生成器,而不是ORM

您可以创建一组类来表示特定的结果集,并在获取时使用。

显然,“t'/'f'到真/假的转换必须由这些定制对象执行。

要完成Narf的回答,这里有一个通用类,用于转换为本机布尔php类型pgsql返回。请注意,这不是最佳解决方案,因为它会将每个字符串“f”或“t”转换为布尔值,而不管数据库中的列是否为布尔值

<?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');

有一个更好的解决方案:使用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_编码):

pdo驱动程序中的响应(json_编码):


请更好地解释:如果布尔值为“f”,是否希望返回0?请参阅
{
    "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"
}
{
    "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"
}