Из вашего кода: $result = pg_query($this->link,$q);
Как вы уже нашли, попытка отобразить содержимое $result
из строки выше не даст вам ничего полезного.Это потому, что он не содержит данных, возвращаемых запросом;он просто содержит «дескриптор ресурса».
Чтобы получить реальные данные, вы должны вызвать вторую функцию после pg_query()
.Вам нужна функция pg_fetch_array()
.
pg_fetch_array()
берет дескриптор ресурса, который вы дали в $result
, и запрашивает у него следующий набор данных.
AЗапрос SQL может возвращать несколько результатов, поэтому обычно помещают pg_fetch_array()
в цикл и продолжают вызывать его до тех пор, пока он не вернет false вместо массива данных.Однако в случае, подобном вашему, когда вы уверены, что он вернет только один результат, можно просто вызвать его один раз сразу после pg_query()
без использования цикла.
Ваш код может выглядеть следующим образом:
$result = pg_query($this->link,$q);
$data = pg_fetch_array($result, NULL, PGSQL_ASSOC);
Как только вы наберете $data
, вы получите фактические данные из БД.
Чтобы просмотреть отдельные поля в $data
, вам нужно посмотретьв его элементах массива.Он должен иметь элемент массива, названный для каждого поля в запросе.В вашем случае ваш запрос содержит только одно поле, поэтому оно будет называться $data['password']
.Если у вас есть больше полей в запросе, вы можете получить к ним доступ аналогичным образом.
Таким образом, ваша следующая строка кода может выглядеть примерно так:
echo "Password from DB was: ".$data['password'];
Если вы хотите увидетьнеобработанные данные можно отобразить в браузере с помощью функций print_r()
или var_dump()
.Эти функции действительно полезны для тестирования и отладки.(подсказка: оберните эти вызовы в теги <pre>
, чтобы они хорошо отображались в браузере)
Надеюсь, это поможет.
[РЕДАКТИРОВАТЬ: запоздалая мысль]
Кстати, немного не по теме, но я хотел бы отметить, что ваш код указывает, что ваша система может быть не полностью защищена (даже если вы правильно экранируете аргументы запроса).
Aдействительно безопасная система никогда не получит пароль из базы данных.После сохранения пароля его следует использовать только в условии WHERE
при входе в систему, а не в запросе.
Типичный запрос будет выглядеть следующим образом:
SELECT count(*) n FROM users WHERE email = '$username' AND password = '$hashedpass'
В этом случае пароль будет храниться в БД как хешированное значение, а не как обычный текст, и предложение WHERE
будет сравнивать его с хешированной версией пароля, введенного пользователем.
Идея состоит в том, что это позволяет нам избежать доступа к паролям в виде простого текста в любом месте системы, что снижает риск взлома, даже если кому-то удастся получить доступ к базе данных.
Это не надежноконечно, и это, конечно, не вся история, когда речь заходит о такого рода безопасности, но это определенно было бы лучше, чем то, что у вас сейчас есть.