通过PHP从Postgres正确读取布尔值

时间:2009-08-21 22:31:55

标签: php postgresql

此线程的主要问题是移到here关于PHP / Postgres中的布尔数据类型。

问题是<{>>将tf转换为truefalse,因为Postgres存储truefalse就这样。


如何在SESSION中使用变量a_moderator

我通过

获取变量a_moderator的值

我获取变量

的#1代码
    $result = pg_prepare($dbconn, "moderator_check_query", 
        "SELECT a_moderator 
        FROM users
        WHERE email = $1;"
    );
    $a_moderator = pg_execute($dbconn, "moderator_check_query", array($_SESSION['login']['email']));

    $rows = pg_fetch_all ( $a_moderator );

    foreach ( $rows as $row ) {
       $_SESSION['login']['a_moderator'] = $row['a_moderator'];
    } 

我用它

失败了

#2我如何使用变量失败的代码

if ( $_SESSION['login']['a_moderator'] == 't' ) {
   // do this
}

我还在true的位置上运行t等值不成功。 SESSION中的变量具有值f,使得

#3输出,它告诉我varibale的值

Array ( [login] => Array ( 
   [passhash_md5] => dd2f85814c35fd465c30b1472f5d3af8 
   [email] => nthoaeuntht@Thnatuh.comn 
   [logged_in] => 1 [user_id] => 13 
   [username] => oeauoeh 
   [a_moderator] => t ) 
)

4 个答案:

答案 0 :(得分:11)

从postgre中选择布尔字段为:: int,在php中选择bool。

 "SELECT a_moderator::int 
        FROM users
        WHERE email = $1;"
  

$ isModerator =(bool)$ row ['a_moderator'];

答案 1 :(得分:2)

这不是这个问题的直接答案,但是这里有一个例子,证明pg _ *()函数确实将postgres布尔值返回为PHP字符串't':

[example]$ cat scratch.php 
<?php
//connect to the database...
require_once 'db_connect.php';

//query
$rows = pg_fetch_all(pg_query('SELECT TRUE::bool AS true'));
//dump returned array, and test with type-safe identity comparator
var_dump($rows, $rows[0]['true'] === 't');

[example]$ php scratch.php 
array(1) {
  [0]=>
  array(1) {
    ["true"]=>
    string(1) "t"
  }
}
bool(true)
[example]$

答案 2 :(得分:1)

我在postgres中编写了一个函数,将boolean导出为PHP可读布尔值:

你只需这样使用它:

SELECT php_bool(columna) from
table

这是功能:

CREATE OR REPLACE FUNCTION php_bool(boolean)
RETURNS numeric LANGUAGE plpgsql

AS
$BODY$

BEGIN

  IF $1 = true THEN
    RETURN 1;
  ELSE
    RETURN 0;
  END IF;
END
$BODY$

答案 3 :(得分:-2)

尝试:

if ( $_SESSION['login']['a_moderator'] ) {
  // do this
}

它是一个布尔值,而不是一个字符串。