2011-04-19 116 views
2

我想插入一个php变量,它有一个非常长的字符串到mysql数据库中。我一直运行到这个错误:MySQL语法错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near line of text from string line 2

这里是我使用插入代码:

$sql = mysql_query("INSERT INTO myResumes (resumeid, rawresumetext) 
VALUES('$resumeid', $rawresumetext)") 
or die (mysql_error()); 

我将如何避免这种情况?

+2

$ rawresumetext has no'' – fceruti 2011-04-19 20:48:06

+0

现在一切都OK,Mike?我将你的新帐户合并到你的旧帐户中,删除了反对投票的问题,并提出了其他几个问题。你的账户现在应该是健康的;让我知道如果它不是。 – 2011-04-19 21:29:34

+0

谢谢你的帮助!我一定会保持活跃。 – Shattuck 2011-04-19 21:47:56

回答

2

在这之前

$sql = mysql_query("INSERT INTO myResumes (resumeid, rawresumetext) 
    VALUES('$resumeid', '$rawresumetext')") 
0

您需要引用字符串$rawresumetext:通过mysql_real_escape_string()它们传递到insert语句,连同失踪“

+1

对不起@ @ jeroen这可能听起来不公平,但我开始downvote每个人都没有正确清理sql语句中使用的变量。这不是因为所有情况都是错误的,而是因为这种做法给初学者留下了非常糟糕的印象。如果你确实提到了正确的做法,我愿意解除这个问题。 – Christian 2011-04-19 20:50:43

+2

@Christian Sciberras我们只看到一行代码,该行会产生错误。问题在于字符串未被引用,故事结束。我们不知道字符串是从哪里来的,我们不知道是否使用了'mysql_real_escape_string'。随时随地附上每个答案,并附上一个大的清晰输入!!! **警告,但不要低估正确的答案,因为它与错误无关,所以不会随之提供。 – jeroen 2011-04-19 20:54:17

+0

@jeroen - 我已经说过,消毒应该在查询层面完成,而不是之前或之后。请记住,其他人可能会得到这个错误,得到解决这个问题,并仍然忽略警告。我是那种很少遵循流行的编程原则的人,但由于上述问题,还有很多问题,我不能再让它继续下去。 – Christian 2011-04-19 20:57:58

0

您可能要escape the strings,这是因为你忘了引用$rawresumetext。也不要忘记通过mysql_real_escape_string()

$resumeid = mysql_real_escape_string($resumeid); 
$rawresumetext = mysql_real_escape_string($rawresumetext); 

$sql = mysql_query("INSERT INTO myResumes (resumeid, rawresumetext) 
    VALUES('$resumeid', '$rawresumetext')") 
    or die (mysql_error()); 
+0

这是我的问题,我没有逃脱非法字符,并已离开引出报价。谢谢。 – Shattuck 2011-04-19 20:53:08

0

首先...... 必须防止MYSQL注射通过这两个变量。 我只是不能重复这一点。

其次,你的问题是由于$rawresumetext没有被引号包围。

正确的方式做到这一点:

$sql = mysql_query("INSERT INTO myResumes (resumeid, rawresumetext) 
    VALUES(".(int)$resumeid.", '".mysql_real_escape_string($rawresumetext)."')") 
    or die (mysql_error()); 

在上面的代码我假设$ resumid是一个整数。

+0

我更新了引号,并注意到我需要避开特殊字符。谢谢你的回答! – Shattuck 2011-04-19 20:53:56

+0

欢迎迈克尔! – Christian 2011-04-19 20:58:46