$\u会话[';用户名';]不工作(SQL/PHP)

$\u会话[';用户名';]不工作(SQL/PHP),php,mysql,session,Php,Mysql,Session,我将使用PHP更新SQL中的一个变量 if( ! empty($result) and $result == 1){ $sql = "UPDATE members SET payment='1' WHERE username=$_SESSION['username']"; } 当我手动设置用户名时,代码是有效的,但是当我使用username=$\u SESSION['username']或username='“$\u SESSION['username']”时,,它无法识别用户名,也无

我将使用PHP更新SQL中的一个变量

if( ! empty($result) and $result == 1){
    $sql = "UPDATE members SET payment='1' WHERE username=$_SESSION['username']";
}
当我手动设置用户名时,代码是有效的,但是当我使用
username=$\u SESSION['username']
username='“$\u SESSION['username']”时,
,它无法识别用户名,也无法工作,您能帮助我吗

$sql = "UPDATE members SET payment='1' WHERE     username='{$_SESSION['username']'}";

在本例中,您需要在字符串周围加上单引号username

首先读取SQL注入、参数化查询等内容。。。您的代码非常危险(请参阅:)

您没有将变量括在引号中。。字符串将作为SQL而不是字符串呈现给MySQL

而且,PHP无法确定您没有尝试引用名为
$\u SESSION
的变量或该变量的元素。你需要像这样用大括号括起来:
username='{$\u SESSION['username']}'


最后,使用“用户名”作为主键是一种糟糕的设计,您应该在会话中存储用户ID,并基于此执行查询。会话的存储空间有限,因此不鼓励像这样存储字符串。MySQL通过ID而不是名称查找记录的速度也更快,即使名称列已被索引。

虽然由于SQL注入漏洞,这肯定不是一个好主意,但变量插值仍然可以在不使用复杂语法的情况下工作。他们只需要删除用户名键中的引号。@t这取决于PHP版本,对于现代解释器来说,这是标准化的,但回到PHP 4或甚至是5的某些版本,在这些版本中,这是有争议的,并且不一致。这是有意义的。我相信你的话,因为那是在我使用PHP之前。