Проблема заключается в преобразовании t
и f
в true
и false
, поскольку Postgres сохраняет true
и false
как таковые.
Как вы можете использовать переменную a_moderator
в SESSION?
Я получаю значение переменной a_moderator
по
$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']; }
Я безуспешно использую его
if ( $_SESSION['login']['a_moderator'] == 't' ) { // do this }
Я также безуспешно выполнял такие значения, как true
на месте t
. Переменная в SESSION имеет значение f
такое, что
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 }
Это логическое значение, а не строка.