mysql查询中的$ _SESSION变量?

时间:2011-04-21 15:55:38

标签: php mysql

每当我尝试查询时:

mysql_query("SELECT * FROM data WHERE `user`=$_SESSION['valid_user'] LIMIT 1");

它不起作用。为什么?我转义变量,然后尝试没有,并尝试在变量周围加上引号。我知道我能做到:

$user = $_SESSION['valid_user'];

但不应该没有它?感谢。

回答:

由于单引号,PHP无法识别$ _SESSION ['valid_user']。所以要么 使用花括号{}或使用单引号。

感谢您帮助我。

6 个答案:

答案 0 :(得分:6)

PHP无法识别带有方括号的字符串中的变量等等,您必须将其包装在大括号中以使其识别它。

mysql_query("SELECT * FROM data WHERE user={$_SESSION['valid_user']} LIMIT 1");

然而 - 您应该始终转义任何进入SQL查询的数据,请尝试以下示例。

$validUser = mysql_real_escape_string($_SESSION['valid_user']);
mysql_query("SELECT * FROM data WHERE user='$validUser' LIMIT 1");

答案 1 :(得分:1)

数组中的数组/对象必须略有不同:

mysql_query("SELECT * FROM data WHERE `user`={$_SESSION['valid_user']} LIMIT 1");

或者,您可以退出字符串并将其连接到:

mysql_query("SELECT * FROM data WHERE `user`=" . $_SESSION['valid_user'] . " LIMIT 1");

答案 2 :(得分:0)

相同但具有PDO和绑定参数

$stmt = $pdo->prepare('SELECT * FROM data WHERE `user`=:user LIMIT 1');
$stmt->execute(array(':user'=>$_SESSION['valid_user']));
$row = $stmt->fetch();

注意:你不能将LIMIT 1变成绑定参数,因为LIMIT不是标准sql的一部分而且PDO有问题,所以它必须像这样绑定

$stmt = $pdo->prepare('SELECT * FROM data WHERE `user`=:user LIMIT :limit');
$limit = 1;
$user = $_SESSION['valid_user'];
$stmt->bindParam(':user', $user, PDO::PARAM_STR);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch();

或者像这样

$limit = 1;
$stmt = $pdo->prepare('SELECT * FROM data WHERE `user`=:user LIMIT '.(int)$limit);
$stmt->execute(array(':user'=>$_SESSION['valid_user']));
$row = $stmt->fetch();

这是我被教导的方式,所以我想指出它

答案 3 :(得分:-1)

试试这个:

mysql_query("SELECT * FROM data WHERE `user`={$_SESSION['valid_user']} LIMIT 1");

还记得将session_start放在页面顶部

答案 4 :(得分:-1)

你的数组在这个上下文中只是字符串的一部分,没有别的。要将表达式标记为它必须包含它的卷曲;-)仅适用于双引号字符串。

mysql_query("SELECT * FROM data WHERE user={$_SESSION['valid_user']} LIMIT 1");

答案 5 :(得分:-1)

您需要在变量之前和之后使用字符串连接运算符'.'

mysql_query("SELECT * FROM data WHERE `user`=".$_SESSION['valid_user']." LIMIT 1");

由于您使用的是双引号字符串,因此您还可以在变量周围使用{}而不是字符串连接:

mysql_query("SELECT * FROM data WHERE `user`={$_SESSION['valid_user']} LIMIT 1");

顺便说一下,您可能应该查看mysqlihttp://php.net/manual/en/book.mysqli.php)库,并使用mysqli::real_escape_stringhttp://www.php.net/manual/en/mysqli.real-escape-string.php)来确保任何非文字变量值被正确转义。