Mysql在程序中使用$ _SESSION时遇到麻烦

时间:2011-01-13 22:12:47

标签: php mysql session

我正在尝试在访问“用户”下的“邮件”表的.php脚本中使用$ _SESSION ['valid_user']。 $ _SESSION ['valid_user']已在我包含的脚本中定义。每当我在SELECT语句中使用“WHERE to = $ _ SESSION ['valid_user']”时,我都会得到一个空白页面。但是,如果我将其取出,脚本将运行并在数据库中显示所有消息,而不仅仅是定义为显示给该特定用户名的消息。尽管如此,我可以在while循环或SELECT语句之外回显$ _SESSION ['valid_user']。这是我的代码:

<?php

include("mainmenu.php");

include("checklogin.php");

在checklogin.php

中定义

// $ _ SESSION ['valid_user']

$con = mysql_connect("localhost", "root", "g00dfor@boy");  if(!$con){   die(mysql_error()); }

mysql_select_db("users", $con);

$result = mysql_query("SELECT * FROM mail WHERE to=$_SESSION['valid_user']");

//使用WHERE to = $ _ SESSION ['valid_user']执行时,它显示空白页。

while($row = mysql_fetch_array($result))   {

echo "To: " . $row['to'] . "| From: " . $row['from'] . "<br/>";

echo "Subject: " . $row['subject'] . "<br/><br/>" . "Message: " . $row['message'];

echo "<br/>";

}

mysql_close($con);

&GT?;

不要说,“将$ _SESSION ['valid_user']放在双引号中。”我已经尝试过了。

5 个答案:

答案 0 :(得分:2)

更改为$result = mysql_query("SELECT * FROM mail WHERE to='".$_SESSION['valid_user']."'");

答案 1 :(得分:2)

您需要在查询中的SESSION变量周围添加括号。

更改

$result = mysql_query("SELECT * FROM mail WHERE to=$_SESSION['valid_user']")

$result = mysql_query("SELECT * FROM mail WHERE to='{$_SESSION['valid_user']}'")

修改

您需要更改

while($row = mysql_fetch_array($result))

while($row = mysql_fetch_assoc($result))

因为您按名称而不是索引值引用列。

答案 2 :(得分:0)

尝试

 $result = mysql_query("SELECT * FROM mail WHERE to='".$_SESSION['valid_user']."'");

 $result = mysql_query("SELECT * FROM mail WHERE to='$_SESSION[valid_user]'");

两者都不应该是有效的查询;

答案 3 :(得分:0)

尝试在变量中捕获您的查询并将其打印出来以查看您获得的内容。

$query = "SELECT * FROM mail WHERE to=$_SESSION['valid_user']";

如果$ _SESSION ['valid_user']包含任何空格,你需要用某种形式的单引号或双引号将其包装起来,其他明智的MySQL也不知道你真正想要的是什么。

答案 4 :(得分:0)

据推测,user_name是一个变量,最初由您网站的用户提供?在这种情况下,当将它嵌入SQL查询时,你绝对必须转义它,否则你将容易受到注入攻击:

$result = mysql_query("SELECT * FROM mail WHERE to='".mysql_escape_string($_SESSION['valid_user'])."'");