2010-11-15 85 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字符線,方式更具可讀性和可維護性。