每当我尝试查询时:
mysql_query("SELECT * FROM data WHERE `user`=$_SESSION['valid_user'] LIMIT 1");
它不起作用。为什么?我转义变量,然后尝试没有,并尝试在变量周围加上引号。我知道我能做到:
$user = $_SESSION['valid_user'];
但不应该没有它?感谢。
回答:
由于单引号,PHP无法识别$ _SESSION ['valid_user']。所以要么 使用花括号{}或使用单引号。
感谢您帮助我。
答案 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");
顺便说一下,您可能应该查看mysqli
(http://php.net/manual/en/book.mysqli.php)库,并使用mysqli::real_escape_string
(http://www.php.net/manual/en/mysqli.real-escape-string.php)来确保任何非文字变量值被正确转义。