【发布时间】:2017-01-10 18:19:14
【问题描述】:
我有这个 SQL 查询:
mysql_query("INSERT INTO Messages (MessBody,Subject,Date,StaffID,AppID)
VALUES ('Your application's status has been changed to ".$_POST['offer']."','Application Status Changed',NOW(),".$_SESSION['StaffUser'].",".$_SESSION['AppID'].")");
变量 $_POST['offer'] 不起作用。我认为这是我在文本中附加它的方式。我尝试了几种不同的方法,但都没有奏效。如果我用文本替换变量,那么记录将被添加到数据库中。
我知道这很愚蠢,但我想不通。老实说,我有点困惑,什么时候使用单引号,什么时候使用双引号,所以这可能是另一个原因,为什么我无法弄清楚。
【问题讨论】:
-
在字符串中,用另一个单引号转义单引号。例如。
'Your application''s status...'. -
在做任何其他事情之前,您应该解决几个主要问题: 1. 不要使用已弃用和不安全
mysql_*-功能。它们自 PHP 5.5 起已弃用,并在 PHP 7 中完全删除。改用 MySQLi 或 PDO。 2. 你对SQL Injections很开放并且应该真正使用Prepared Statements而不是连接你的查询,如果你使用上面提到的MySQLi或PDO就可以使用。 -
不要使用
mysql-functions,它们已被弃用,在 PHP7 中,已删除。请改用mysqli或PDO,并使用参数化查询 来保护自己免受SQL 注入(您的代码很容易受到攻击),并防止所有这些讨厌的小问题报价相关的错误... -
首先,阅读有关字符串的手册。它解释了单引号和双引号字符串的区别。其次,这段代码很糟糕,会导致灾难。 a) 您正在使用已从当前版本的 PHP 中删除的过时 mysql 接口库,b) 您正在将用户提供的值直接插入到 SQL 字符串中。这将使您的应用程序容易受到 SQL 注入的攻击。
-
代码中的主要问题是您自己造成的非自愿 SQL 注入。如果你解决了这个问题,你的代码不仅可以工作,而且你也可以安全地被第三方故意注入。