使用PHP将会话变量添加到MYSQL查询中

6

我尝试将两个变量传递到mysql查询中,但是在下面传递会话变量时会卡住:

$check = mysql_query("SELECT * 
                      FROM Clients 
                      WHERE Username = '$new_username' 
                      AND Username != '$_SESSION['Username']'") or die(mysql_error()); 

有什么建议吗?提前感谢。

尝试这个代码:"SELECT * FROM Clients WHERE Username = '$new_username' AND Username != '".$_SESSION['Username']."'" - Shakti Singh
3
“Getting stuck”不是一个真正的错误信息。它生成了什么输出? - Michael Robinson
谢谢,Shakti,这个方法可行 :) - Matt
我希望你现在明白了,你的问题与会话或mysql没有任何关系,只是PHP字符串语法问题。 - Your Common Sense
还要注意Salman的回答。SQL注入是需要避免的事情... - Your Common Sense
mysql_*函数已经不再受支持,它们已经正式弃用不再维护,并将在未来被移除。为确保项目的功能性,您应该使用PDOMySQLi更新您的代码。 - TRiG
4个回答

12

这是因为你的单引号'$_SESSION['Username']'已经被session中的值结束了。将其更改为'" . $_SESSION['Username'] . "'就可以解决问题。


8

这个方法可以实现,但是这样做非常非常糟糕:

$check = mysql_query("
    SELECT * 
    FROM  Clients 
    WHERE Username = '$new_username' 
    AND   Username != '{$_SESSION['Username']}'
") or die(mysql_error());

这也可以工作,而且是推荐的做法:

$check = mysql_query("
    SELECT * 
    FROM  Clients 
    WHERE Username  = '" . mysql_real_escape_string($new_username) . "' 
    AND   Username <> '" . mysql_real_escape_string($_SESSION['Username']) . "'
") or die(mysql_error());

1

为什么没有人提到 "text text $array[key] text" 语法?这与编程有关。

SELECT * 
FROM  Clients 
WHERE Username = '$new_username' 
AND   Username != '$_SESSION[Username]'

0

当您将数组嵌入字符串中时,必须通过连接它们或使用花括号来分隔它们。

$string = "text text {$array['key']} text";

或者

$string = "text text " . $array['key'] . " text";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接