2017-08-04 100 views
-1

我即将更新使用PHP

if(! empty($result) and $result == 1){ 
    $sql = "UPDATE members SET payment='1' WHERE username=$_SESSION['username']"; 
} 

当我手动设置的用户名,代码工作,在SQL变量,但是当我使用username=$_SESSION['username']username='".$_SESSION['username']."',它不能识别用户名,它不起作用,你能帮我吗?

回答

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

你需要周围的字符串单引号在这种情况下,用户名

0

SQL注入,参数化查询,等等......你的代码是非常危险的首先读了(见:mysqli_real_escape_string)。

你没有用引号包围你的变量..字符串将作为SQL呈现给MySQL,而不是字符串。

而且,PHP无法确定您是不是试图引用一个名为$_SESSION的变量或变量的元素。你需要用如下括号括起来:username = '{$_SESSION['username']}'

最后,使用“用户名”作为主键的设计很差,您应该在会话中存储用户的ID并根据该ID进行查询。会话存储空间有限,存储字符串非常令人沮丧。 MySQL通过ID而不是名称查找记录的速度也更快,即使名称列已编入索引。

+0

尽管由于SQL注入漏洞,它绝对不是一个好主意,但是在不使用复杂语法的情况下,变量插值仍然可以工作。他们只需要从用户名键中删除引号。 –

+0

@ Don'tPanic它取决于PHP版本,对于现代的解释器来说,这是标准化的,但可以回到PHP 4甚至某些版本的5,如果这是有争议的并且是不一致的。 – Geoffrey

+0

有道理。我会在你使用PHP之前就说出你的话。 –