2010-11-15 75 views
0

我试图执行此:很简单的MySQL查询不工作

$result = mysql_query("INSERT INTO timesheet (project_no,user,cust_name,notes,duration) VALUES("'".$_POST['project']."', '".$_POST['user']."', '".$_POST['cust']."', '".$_POST['notes']."', '".$_POST['duration']."'")") or die(mysql_error()); 

我知道SQL注入。但现在任何人都可以发现与撇号,语音标记等问题?

+1

你有没有考虑尝试一个IDE来突出你的?这里有几个免费的选项... – acm 2010-11-15 12:30:54

+0

是的,我使用的是记事本++,它突出显示,但我努力寻找撇号造成麻烦! – benhowdle89 2010-11-15 12:32:50

回答

1

撇号不正确。

$result = mysql_query("INSERT INTO timesheet (project_no,user,cust_name,notes,duration) VALUES('".$_POST['project']."', '".$_POST['user']."', '".$_POST['cust']."', '".$_POST['notes']."', '".$_POST['duration']."')") or die(mysql_error()); 

错误发生在查询字符串中的“值”和右括号内。使用语法突出显示的编辑器,该编辑器已经显示出问题。

+0

正在使用记事本++ – benhowdle89 2010-11-15 12:34:45

+0

正确,但仍然是一个难以理解的混乱。 – 2010-11-15 12:39:51

+0

我喜欢JEdit的小东西和Netbeans的IDE。我认为在记事本++字符串默认情况下标记为灰色?也许这就是为什么它很难被认出。我喜欢更明亮的颜色,但这只是我个人的口味;) @ Kemp是找到缺少的撇号,而不是整个清理代码。当然,你的解决方案更清洁。 – enricog 2010-11-15 12:41:55

0

我认为双引号和关闭撇号的问题。试试这个:

$result = mysql_query("INSERT INTO timesheet (project_no,user,cust_name,notes,duration) VALUES('".$_POST['project']."', '".$_POST['user']."', '".$_POST['cust']."', '".$_POST['notes']."', '".$_POST['duration']."')") or die(mysql_error()); 
1

充满部分字符串和变量与点连接的不必要的行是许多PHP程序员最可怕的习惯之一。做你的未来自己一个忙,并写可读代码。坚持这个例子(忽略所有其他问题),使用其他变量来保存值(在真实世界中,无论如何,因为你不会直接使用$_POST,所以我希望),并写下类似内容:

$sql = "INSERT INTO timesheet (project_no,user,cust_name,notes,duration) 
     VALUES('$project', '$user', '$cust', '$notes', '$duration')"; 

$result = mysql_query($sql) or die(mysql_error()); 

没有更多的引号打开/关闭的疯狂,没有更多的239字符线,方式更具可读性和可维护性。