1

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

对于整数,这不是一个大问题,它只是一个简单的转换。

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

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

一个特定的情况是,我想迁移一个在 MySQL 上运行的大型应用程序做 PgSQL,并且将有很多我必须更改的条件。

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

示例代码:

$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' 是一个布尔值。

4

1 回答 1

0

实际上,PHP 确实返回 't' 表示真,而 'f' 表示假。您需要创建自己的这些处理或使用为您抽象的框架。不幸的是,至少从 PHP 4.0 开始,这就是该语言的工作方式......

于 2013-04-11T09:23:09.510 回答