2012-12-18 54 views
3

我想在PHP中創建一些基本的插入查詢,它不斷地拖出我一個錯誤,但我真的不知道爲什麼,請問你們有沒有什麼不對?在簡單插入查詢中的語法錯誤

mysql_query(" 
INSERT INTO itens (nome, data, cliente, link, desc, img) VALUES ($nome,$data,$cliente,$link,$desc,$img) 
") or die(mysql_error()); 

更新

從OP的刪除答案拉出時,代碼現在:

mysql_query("INSERT INTO itens (nome, data, cliente, link, `desc`, img) 
VALUES ($nome,$data,$cliente,$link,$desc,$img)") or die(mysql_error()); 

和錯誤是:

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 'kl,j)' at line 2 

吉隆坡和j是我在表格中插入的最後兩件事情。

+0

表名是真的'itens'還是'items'? – Havelock

+5

永不說「它給出了一個錯誤」。總是說「它給*這個*錯誤」,然後粘貼實際的錯誤。 –

+0

抱歉,錯誤是:您的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以在'desc,img'附近使用正確的語法VALUES(s,2012-12-18,(nome,data,cliente,link,desc,img),http:// ww'在第1行 – SaraVieira

回答

7

DESC是MySQL中保留關鍵字,您應該backtick逃脫它,當然

INSERT INTO itens (nome, data, cliente, link, `desc`, img) 
VALUES ($nome,$data,$cliente,$link,$desc,$img) 

你查詢與SQL Injection脆弱的,請花時間閱讀文章如何防止它,

+0

逃避所有列名是否是常見做法? – Sharlike

+0

@Sharlike nope,只有那些保留關鍵字的人才必須轉義。 –

+0

我改變了列的名稱,現在它顯示我這個錯誤: 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行的'name,2012-12-25,Client,link,desc,link'附近使用正確的語法'' – SaraVieira

2

首先 - 逃生,逃生,逃生瞭解PDO /庫MySQLi,準備發言

第二 - 知道reserved keywords是不能用於列名的;那些必須使用反引號逃脫。

$sql = sprintf("INSERT INTO itens (nome, data, cliente, link, `desc`, img) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');", 
    mysql_real_escape_string($nome), 
    mysql_real_escape_string($data), 
    mysql_real_escape_string($cliente), 
    mysql_real_escape_string($link), 
    mysql_real_escape_string($desc), 
    mysql_real_escape_string($img) 
); 

mysql_query($sql); 

三 - 我想你的表名(itens VS items)做了一個錯字。

+1

hey jack的形式,'mysql_real_escape_string'沒有完全保護'SQL Injection'。 [SQL注入繞過mysql_real_escape_string()](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string/5741264#5741264) –

+0

@JW。因此圍繞每個轉義字符串的引號。請正確閱讀。 –

+0

數字怎麼樣?它會防止注射。我正確閱讀。 –