您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得在网站附近使用的正确语法。
mysql_query("UPDATE Scholarships2 SET Requirements2 = '$requirements2'
WHERE scholarshipID = '$sID'")
or die("Insert Error1: ".mysql_error());
我在这个主题上阅读了其他Stackoverflow问题/答案,但找不到我正在使用的保留字。
$ sID只是一个int,而$ requirements2是
$regex = '/<h4>Requirements<\/h4>([\n\n\n]|.)*?<\/table>/';
preg_match_all($regex,$data,$match);
$requirements2 = $match[0][0];
答案 0 :(得分:1)
在网站附近使用正确的语法
这意味着它正在抱怨您的查询位's website
。 “你的查询中的那个位置在哪里?”,我听到你问。
嗯,其中一个变量包含Bob's website
之类的内容,以及你盲目地将其注入查询的事实会给你类似的东西:
UPDATE Scholarships2 SET Requirements2 = 'Bob's website' ...
这个特定的查询将不与SQL解析器完美结合: - )
当little Bobby Tables窃取或删除您的信用卡数据库时,不会立即阻止解析器的其他可能性也不会与您的客户群相关。
有关更全面的解释和避免策略,请参阅this link。在您的情况下,这可能涉及mysql-real-escape-string。
换句话说,你需要这样的东西:
mysql_query(
"UPDATE Scholarships2 SET Requirements2 = '" .
mysql_real_escape_string($requirements2) .
"' WHERE scholarshipID = '" .
mysql_real_escape_string($sID) .
"'"
) or die("Insert Error1: ".mysql_error());
顺便说一句,如果$sID
只是一个整数(和不受注入攻击),你可以删除它周围的引号。我不认为它与MySQL有关(因为它的“一切都是字符串”性质)但你的查询将无法移植到其他DBMS'。
答案 1 :(得分:0)
这取决于变量中的值 根据数据类型,您可以执行以下操作
$requirements2 = mysql_real_escape_string($requirements2); // escape string
$sID = (int)$sID; // force integer
问题是如果你的$ demand中有一个字符串,并且它包含一个引号'
,它将破坏你的sql语句。
以下是我经常组织代码的事情。
$sql = "UPDATE Scholarships2 SET Requirements2 = '%s'
WHERE scholarshipID =%d";
$sql = sprintf($sql,
mysql_real_escape_string($requirements2),
(int)$sID
);
答案 2 :(得分:0)
您是刚从POST或AJAX查询中获取表单字段吗?听起来你有一个包含's website
的字符串。
确保通过mysqli_escape_string运行代码。
答案 3 :(得分:0)
问题是,您的$requirements2
变量包含单引号(错误消息显示在's website
附近时 - 可能是您插入的内容类似welcome to Sal's website
)。当MySQL遇到这个字符时,它会把它解释为整个字符串的终止。
例如,如果您将短语Welcome to Sal's website
替换为当前$requirements2
所在的查询,则您的查询将如下所示:
UPDATE Scholarships2 SET Requirements2 = 'Welcome to Sal's website'
正如您所看到的,这会产生一个带引号的字符串Welcome to Sal
,其余的字符串从末尾悬挂而不是任何东西的一部分。这就是错误抱怨的部分。
你真的需要切换到PDO和prepared statements,否则你会对这些类型的错误敞开大门,包括SQL注入,这是非常糟糕的事情。
预备语句允许您使用可放置动态数据的占位符指定查询。然后,这个额外的数据在一个单独的函数中传递给PDO,PDO /数据库可以确定清理它的最佳方法,这样它就不会被误解为查询结构本身的一部分。
答案 4 :(得分:0)
你需要逃避$requirements2
中的任何输入
你可以通过
$req2=mysql_real_escape_string($requirements2);
mysql_query("UPDATE Scholarships2 SET Requirements2 = '$req2'
WHERE scholarshipID = '$sID'")
or die("Insert Error1: ".mysql_error());
这将转义任何特殊字符,例如$requirements2