2011-06-21 146 views
-7

我觉得很愚蠢,但我找不到错误... 谢谢。这个sql语句有什么问题?

$l_sSql = 'INSERT INTO ftb2010_winners ("first_name", "last_name", "email", "dob", "token", claimed_status) VALUES (\''.$l_aData['firstName'].'\',\''.$l_aData["lastName"].'\',\''.$l_aData["email"].'\',\''.$l_aData["year"].'-'.$l_aData["month"].'-'.$l_aData["day"].'\', "token", 0;'; 

以下是错误当我运行它

#1064 - 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 '"first_name", "last_name", "email", "dob", "token", claimed_status) VALUES ('Phi' at line 1

编辑...好的,谢谢......知道了,是的,我知道这是什么stuipid说我漏掉了

+8

运行它,它会告诉你错误。 – BoltClock

+1

难以阅读和理解 – Rahul

+1

对于上帝之爱,请至少使用'sprintf'来格式化您的查询,如果您不能使用**准备好的语句**以防使用mysql扩展。此外,您不必将所有内容放在一行中,就可以在SQL中换行。 –

回答

5

第一个错误:字段名称应被反引号括起来(而且即使这样,只有当字段名是一个保留的SQL字或者包含特殊字符时,反引号才是必要的。一般来说,反引号是个好主意,但在你的例子中,你可以不用他们)

第二个错误:在查询结束时丢失关闭瑕疵。

可能的错误:确保您使用的所有变量都已正确转义。不这样做会导致你的代码容易受到SQL注入攻击。 (我不知道这对你来说实际上是一个问题而没有看到更多你的代码)

样式问题:你在没有任何理由的情况下在单引号和双引号之间混合你的引号。即你的一些值用单引号引起来,其他引号用双引号引起来。始终如一。而且,所有逃脱的单引号使整个事情变得非常难以阅读!

5

您的值缺少一个右括号。

+1

此外,字段名称应该反引号括起来,而不是用双引号。 –

5

最后没有右括号“)”。

4

在MySQL中,字段和表名应该用反引号括起来,而不是用双引号。

所以它应该是:

INSERT INTO ftb2010_winners (`first_name`, `last_name`, ... 
3

你不应该把你的COLUMNNAMES在"

INSERT INTO ftb2010_winners (first_name, lastname, ....) 

和ofcourse失踪)

2
  • 你不应该逃避环绕数据的刻度 (')。你应该在你的数据逃避剔/撇号
  • 字段名应该由反引号('),而不是双引号(“)将
  • 你错过了在语句的结束的结束括号