2014-07-11 50 views
1

因此,我在我的網站上設置了一個下載數據庫,使我能夠跟蹤下載數量,並且正在嘗試爲我和我的同胞設置一個前端,以便將新下載插入到數據庫中。我以PHP爲主設置前端。這裏我的SQL/PHP語法有什麼問題?

我的分頁設置的方式刪除我的表單簡單發佈的可能性,所以相反,我有JS序列化數據並重新加載頁面,然後我反序列化PHP中的數據,將值粘貼到MySQL查詢,並嘗試運行它。

這裏是我的SQL代碼看起來像PHP的內部:

$sql = "INSERT INTO dl (id, file, desc) VALUES ('$idd', '$file', '$desc')"; 

這變成這個字符串:

INSERT INTO dl (id, file, desc) VALUES ('a56', 'test.zip', 'cake') 

但是,當頁面嘗試運行它,我得到這個錯誤:

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 'desc) VALUES ('a56', 'test.zip', 'cake')' at line 1

而且,這種奇怪的現象是由於運行查詢的代碼行不是1號線。這是上線28

任何幫助表示讚賞:)

+2

嘗試更改列的名稱,可以保留文件和desc –

+1

是Desc Desc是一個mysql預定義的關鍵字。我們用排序參數 –

回答

6

desc是在MySQL中的reserved keyword

建議的解決方法是對使用反引號。從MySQL manual

If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it.

如果重命名錶或列是不可能的,包裝在反引號違規標識(`):

$sql = "INSERT INTO dl (id, `file`, `desc`) VALUES ('$idd', '$file', '$desc')"; 

看看這個問題太:When to use single quotes, double quotes, and backticks in MySQL

+2

你可以走多餘的路程,並反向所有的字段和表名。 –

+0

這對我有什麼好處,或者只是在將來爲此提供保護? – Zbee

+0

這是強制性的,你不應該使用保留關鍵字,但仍然如果你堅持使用反引號簡單 – Tushar

1

desc是SQL的保留字。

這是(連同ASC)用於確定結果的排序順序。

+1

'file'也是保留的:https://www.drupal.org/node/141051 –

+0

有沒有可以在這種情況下使用的解決方法?編輯:沒關係,Tushar的答案工作:) – Zbee

+1

@Zbee你必須使用反斜槓列周圍的名稱。 – Jens

1

的保留字列表請試試這個。

$sql = "INSERT INTO dl (`id`, `file`, `desc`) VALUES ('".$idd."', '".$file."', '".$desc."')"; 

希望這是你的有用的。