Хранение массивов как переменных сеанса PHP - PullRequest
1 голос
/ 16 марта 2012

Мой сайт имеет список пользователей, и каждый пользователь является участником различных областей (групп, мест и т. Д.).Вместо того, чтобы делать вызов БД каждый раз, когда я хочу составить список, я хочу сохранить переменные массива в сеансе.

    //creates the array of groups that the user is in
    $_SESSION['gx']=mysql_query("SELECT * FROM `members` WHERE `user`='$user'");

Теперь моя страница загружается и выполняется session_start ().Однако, когда моя страница отправляется на получение этой переменной сеанса, ее там нет.Есть предложения?

Спасибо

Ответы [ 5 ]

4 голосов
/ 16 марта 2012

Возвращаемое значение mysql_query не может быть сериализовано (сохранено в сеансе). Но вы можете извлечь результаты из обычного массива и сериализовать , что :

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'");
if ($res) {
    $_SESSION['gx'] = mysql_fetch_array($res);
}

Предупреждение : в зависимости от того, откуда $user получает свое значение, этот код может быть уязвим для внедрения SQL. Код ответственно.

1 голос
/ 16 марта 2012

mysql_query() не возвращает массив результатов, он возвращает ресурс, который вы можете использовать для mysql_fetch_array() и т. Д.

Высначала нужно получить данные:

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'") or die('Error!');

$_SESSION['gx'] = array();
while ( $arr = mysql_fetch_array($res, MYSQL_ASSOC) )
{
  $_SESSION['gx'][] = $arr;
}

Я считаю, что имена пользователей уникальны, поэтому вам нужно всего один вызов mysql_fetch_*(), например:

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'") or die('Error!');

$_SESSION['gx'] = mysql_fetch_array($res, MYSQL_ASSOC);
0 голосов
/ 16 марта 2012

Вы выполняете запрос, но возвращаете ресурс, а не результаты.Вам нужно получить массив, если вы хотите данные.

$_SESSION['gx']=mysql_fetch_array(mysql_query("SELECT * FROM `members` WHERE `user`='$user'"));
0 голосов
/ 16 марта 2012

mysql_query() возвращает не массив, а ресурс.Сначала получите значения из ресурса, а затем сохраните результат в своем сеансе.

0 голосов
/ 16 марта 2012

mysql_query() возвращает ресурс, вам нужно получить этот ресурс в массиве, подобном этому:

$query = mysql_query("SELECT * FROM `members` WHERE `user`='" . mysql_escape_string($user) . "'");
$_SESSION['gx'] = mysql_fetch_array($query, MYSQL_ASSOC);

Кроме того, у вас есть потенциальная дыра в безопасности. Возможно, вы захотите экранировать $ user с помощью mysql_escape_string(), чтобы избежать SQL-инъекций.

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