2012-03-16 22 views
1

私のサイトにはユーザーのリストがあり、各ユーザーは異なるエリア(グループ、場所など)のメンバーです。リストを作成するたびにDB呼び出しを行うのではなく、セッション変数に配列変数を格納する必要があります。PHPセッション変数としての配列の保存

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

私のページが読み込まれ、session_start()が実行されます。しかし、私のページがそのセッション変数を取得するために行くと、そこにはありません。助言がありますか? mysql_query

おかげ

+1

'mysql_query'が、それは結果リソースを返します...配列を返しません...あなたは、クエリの結果から配列を作成する必要があります... – keithhatfield

答えて

4

戻り値は(セッションに格納された)シリアライズすることができません。しかし、あなたは通常の配列から結果を引くとことをシリアライズすることができます。

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

警告:$userからその値を取得する場所に応じて、このコードは、SQLインジェクションに対して脆弱であるかもしれません。責任を持ってコードします。あなたが最初のデータをフェッチする必要が

1

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_*()への呼び出しを1つ必要があります。

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

$_SESSION['gx'] = mysql_fetch_array($res, MYSQL_ASSOC); 
0

mysql_query() Rあなたは次のような配列でこのressourceを取得する必要があります:

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

また、潜在的なセキュリティホールがあります。 SQLインジェクションを避けるには、おそらく$ userをmysql_escape_string()でエスケープしたいと思うでしょう。

+0

- どうもありがとう。 "$ user"は、ログインページから投稿されたときにエスケープされた変数から来ています。そのため、警告はありがたいです。 – user988129

0

mysql_query()は、配列ではなくリソースを返します。最初にリソースの値を取得し、その結果をセッションに格納します。

0

クエリを実行していますが、結果ではなくリソースを返しています。データが必要な場合は、配列を取得する必要があります。それがあった

$_SESSION['gx']=mysql_fetch_array(mysql_query("SELECT * FROM `members` WHERE `user`='$user'")); 
関連する問題