2014-03-28 49 views
1

我正在用購物車製作產品管理系統。在產品管理php我顯示/添加/刪除/編輯數據庫中的產品。當我嘗試添加產品時,出現以下錯誤消息:SQL Sytax錯誤。雖然看不到

發生錯誤:您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在第1行的'desc,price'附近使用正確的語法VALUES('28/03/2014','prod1','desc1','5.99')'

我的代碼:

if(isset($_POST["add_prod"])) 
{ 
    $date = date("d/m/Y"); 
    extract($_POST); 

    $link = mysqli_connect("localhost", "root", "*******", "souljaz"); 
    $sql = "INSERT INTO products (date, name, desc, price) VALUES ('{$date}', '{$name}', '{$desc}', '{$price}')"; 
    if(mysqli_query($link, $sql)) print "Product added."; 
    else print "Error occured: ".mysqli_error($link); 
} 
+0

'desc'是一個保留字..用反引號括起來。 –

+0

'desc'是[保留關鍵字](http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-6.html)。你需要用反引號包裝:'\'desc \''(或者使用更好的名字) –

+1

爲什麼人們甚至會在「_Description_」上使用「_desc_」(_assuming_這就是它代表的!),我永遠不會知道(不是自80年代以來)。我會表達進一步的困惑,而不是一個建議改進命名約定並自動提供潛在的不良解決方案的答案。 –

回答

1

desc是一個保留關鍵字

所以你需要備份蜱作爲

`desc` 

$sql = "INSERT INTO 
products (date, name, `desc`, price) 
VALUES ('{$date}', '{$name}', '{$desc}', '{$price}' 
)"; 
+0

所有這些年來,我一直在編程PHP,我不能相信我忽略了這個保留關鍵詞。歡呼夥計它的固定吧! – user3473776

+0

和downvote的原因? –

+0

@AbhikChakraborty:當選擇downvote張貼時,SO應該要求評論。 –

1

DESCreserved keyword。如果你要使用它,你必須在蜱把它包:

$sql = "INSERT INTO products (date, name, `desc`, price) VALUES ('{$date}', '{$name}', '{$desc}', '{$price}')"; 

一個更好的主意,以防止未來的問題是重命名列description這是很清晰的它的價值是什麼。

+0

只要養成反擊每個字段名稱的習慣,所以當您不小心使用保留關鍵字(或更糟糕的是,當前免費的名稱將成爲未來的關鍵字)時,您不會有不愉快的意外。 –

+0

@PhilPerry:完全同意你的意見。 –