PHP pg_fetch_ *包含错误的返回类型

时间:2012-11-04 19:48:28

标签: php

我的PgSQL适配器有问题。我正在使用本机驱动程序,方法pg_fetch_ *只返回字符串,即使列类型是整数或布尔值。

对于整数来说,这不是一个大问题,它只是一个简单的演员。

真正的问题在于布尔值,因为它返回字符串't'为TRUE,'f'为FALSE。

好的,简单的解决方案就是每次我有布尔字段时对此进行验证,但它不是最聪明的...

一个特定的案例是我想要迁移一个运行在MySQL上的庞大应用程序做PgSQL,这将是我必须改变的很多条件。

我试图在Google上找到一些东西,但是(我不知道我是否使用了错误的关键字组合)是UNsuccessfull。

示例代码:

$db = pg_connect("host=localhost dbname=**** user=**** password=**** port=5432") or die("Could not connect");
pg_set_error_verbosity(PGSQL_ERRORS_VERBOSE);
$sql = 'SELECT * FROM mesa';
$result = pg_query($db, $sql);
var_dump(pg_last_error($db));

$data = array();
while($row = pg_fetch_assoc($result)) {
    $data[] = $row;
}
var_dump($data);

输出:

array (size=10)
  0 => 
    array (size=3)
    'numero' => string '2' (length=1)
    'max_pessoas' => string '8' (length=1)
    'status' => string 't' (length=1)
1 => 
    array (size=3)
    'numero' => string '3' (length=1)
    'max_pessoas' => string '8' (length=1)
    'status' => string 't' (length=1)

继续前进,但'numero'是一个整数,'status'是一个布尔值。

1 个答案:

答案 0 :(得分:0)

实际上,PHP确实返回't'表示true,'f'表示false表示。您需要创建自己的处理方法或使用为您抽象的框架。不幸的是,这至少是PHP 4.0以来该语言的工作方式......