使用PHP在Mysql字符串中转义变量

时间:2013-07-07 19:00:41

标签: php mysql

我正在尝试在PHP脚本中使用MySql update语句来更新列中的数据。 MySql数据库中的表称为用户,相关列是短信和用户名。

mysql_query
("UPDATE users set sms = $_SESSION[sms]+ 50 WHERE username = $_SESSION[username]")
;
echo mysql_error();

运行脚本后我得到的错误是:

Unknown column 'maihannijat' in 'where clause'

原因是用户名也是列名旁边的变量。变量表示活动会话的用户名。

我希望在WHERE子句之后转义用户名变量,以便在WHERE字之后传递确切的[用户名]文本类型。

2 个答案:

答案 0 :(得分:2)

这将解决您的问题,但是......

mysql_query
("UPDATE users set sms = ".$_SESSION['sms']." + 50 WHERE username = ".$_SESSION['username'])
;

...您的查询中有3个主要错误:您只能在"中编写简单变量,例如"SELECT $x FROM $y"。其次,您需要将'"设置为地址关联数组键,例如$_SESSION["myvar"]。第三,你正在使用mysql,这已经过了几年了。请改用mysqli

更新:我不确定您的查询是做什么的,但这可能是另一种选择:

mysql_query
("UPDATE users set sms = ".($_SESSION['sms'] + 50)." WHERE username = ".$_SESSION['username'])
;

答案 1 :(得分:-1)

为了避免您的mysql语句混淆(试图将您的表名解释为其查询的一部分),带有mysql保留名称的行或表应该用反引号(`)括起来以避免冲突。

例如:你有一个名为 table 的表名(你不应该首先使用它)但是,如果你真的想用这个名字作为你的表名:

mysql_query("SELECT * FROM `table`")

最好在mysql语句之外进行计算。通过做: 在你的情况下,它应该更像是:

$final = $_SESSION[sms]+50然后在您的查询中使用$final

"UPDATE users set sms = '$final' WHERE username = `$_SESSION[username]` "

最后一件事:您不应该使用mysql_功能。学习并使用mysqli_ / PDO

修改

$final =  $_SESSION[sms]+ 50;

    mysql_query("UPDATE users set sms = '$final'
    WHERE username = ".$_SESSION['username']." ")or die(mysql_error());