为什么pg_query_params将布尔值读作字符串?

时间:2015-10-26 14:26:04

标签: php postgresql boolean

我在PostgreSQL表中有一个布尔列。在pgAdmin III中,表格视图显示' TRUE'并且' FALSE'为列。当我做一个SQL'选择*'时,那个其他窗口会显示' t'并且' f'。这是一些配置问题吗?它不应该也显示出真实的'和' FALSE'?

然后我们来PHP。我有以下代码来处理这个布尔值(实际上我做了不同的事情,但在这里简化了它):

$q = "select * from tax where id = $1";
$res = pg_query_params($conn,$q,[$id]);
if ($res) {
    $row = pg_fetch_array($res,NULL,PGSQL_ASSOC);
    $valido = $row['valido'];
    echo $valido; // prints 'f' (== 'FALSE' on database)
    if ($valido) {
        echo 'valid'; // gets here
    } else {
        echo 'invalid';
    }
}

数据库说' FALSE',php读' f'并将其视为“真实”。这是一些错误的配置,或者php总是读取一个布尔值作为解释为与原始值相反的文本?

1 个答案:

答案 0 :(得分:1)

让我们面对现实:

  • PDO或pgsql库返回的数据始终是字符串。
  • 布尔值的Postgresql表示是字符串' t'并且' f'。

这是由"返回值"中的PHP文档指定的。不同的获取功能。 herehere

如果您希望将这些结果强制转换为PHP等效类型,则必须设置a converter system