MySQL查询坏了

时间:2011-11-09 06:35:45

标签: php mysql insert

好吧已经很晚了,我不知道为什么会这样。所以这里......错误如下

  

语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING   或T_VARIABLE或T_NUM_STRING

通常我会假设它是一个混合物; “或类似的,我已经检查过我发现周围的代码没有丢失。

现在尽管可能存在“注射”因素,我现在不在乎有人请告诉我这一行的错误。

mysql_query("INSERT INTO files_posted (ID, when, email, randomkey, count, fileID) VALUES (NULL, $when, $email, $fakeHash, '0', mysql_real_escape_string($_POST['fileID']))") or die(mysql_error());

3 个答案:

答案 0 :(得分:3)

除了在嵌入(插值)变量上使用带引号的下标之外,您可能在查询中遗漏了一些引号(在值周围)。

试试这个:

mysql_query("INSERT INTO files_posted (ID, when, email, randomkey, count, fileID) VALUES (NULL, '".mysql_real_escape_string($when)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($fakeHash)."', '0', '".mysql_real_escape_string($_POST['fileID'])."')") or die(mysql_error());

如果$_POST['fileID']总是应该是一个整数,那么它不需要包含在mysql_real_escape_string调用中,它实际上更安全(针对SQL注入)并且可能更有效只需将其转换为int:

mysql_query("INSERT INTO files_posted (ID, when, email, randomkey, count, fileID) VALUES (NULL, '".mysql_real_escape_string($when)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($fakeHash)."', '0', ".((int)$_POST['fileID']).')') or die(mysql_error());

答案 1 :(得分:1)

你的一个变量包含一个撇号: $ when,$ email,$ fakeHash

这是我的猜测。您应该对所有这些使用mysql_real_escape_string()。

答案 2 :(得分:1)

确保将所有文本字段值括在(单引号或双引号)中(并确保它们被转义)。引号是确保MySQL将文本视为字符串而不是其他内容所必需的。

或者,使用PDO,您不必担心。