Правильное чтение логического значения из Postgres с помощью PHP - PullRequest
8 голосов
/ 22 августа 2009

Основная проблема этой темы перенесена в здесь о булевом типе данных в 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 ) 
)

Ответы [ 4 ]

11 голосов
/ 20 декабря 2012

Выберите логическое поле из postgre как :: int и в php приведите к bool.

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

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

2 голосов
/ 22 августа 2009

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

Я написал функцию в postgres для экспорта логического значения в 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$
0 голосов
/ 22 августа 2009

Попробуйте:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...