Чтение boolean правильно из Postgres по PHP

Основная проблема этого потока перенесена сюда на булевский тип данных в PHP / Postgres.

Проблема заключается в преобразовании t и f в true и false , поскольку Postgres сохраняет true и false как таковые.


Как вы можете использовать переменную a_moderator в SESSION?

Я получаю значение переменной 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 Результат, который говорит мне, что значение варибала

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

Выберите boolean field из postgre as :: int и в php cast to bool.

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

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

Это не прямой ответ на вопрос, но вот пример, демонстрирующий, что функции 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]$ 

Я написал функцию 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$ 

Пытаться:

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

Это логическое значение, а не строка.