2011-12-29 108 views
-3

您好球員和女孩我嘗試到SQL更新,但認爲我忘了「或」 即時得到這個錯誤messegeSQL語法錯誤,我是否錯誤?

您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊在第一行使用'Brock'='1'WHERE username ='admin''附近使用正確的語法

錯誤在於在這段代碼中,如果我將代碼從頁面載入但它需要兩個更新

$blah = mysql_query("UPDATE users SET '".$_SESSION['gymleader']."'='1'WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

我是我嗎?出錯了?

+2

您有一個名爲Brock的專欄?......愛你的硬編碼!這會在未來造成大量問題。列名不是要用'引用的字符串'如果他們確實需要引用,因爲它們是保留字,那麼您使用反引號' – 2011-12-29 12:47:13

+0

http://xkcd.com/327/ – 2011-12-29 12:47:19

+0

錯誤消息指出您直接指向您的錯誤。請參閱Robin的答案以獲取更多信息,並仔細閱讀計算機說的內容以及鍵入的內容:) – Matten 2011-12-29 12:47:49

回答

1

除了這個事實,這看起來像一個壞主意,像這樣的代碼,假設你有一個名爲布魯克列,那麼你應該使用這種類型的引號來代替:

$blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

公告我將'替換爲`

+0

感謝您接近並且不會像其他人那樣關注' – user1121083 2011-12-29 13:02:36

+1

@nute, Stackoverflow使用反引號來標記代碼 - 這也是通過縮進來實現的,然後讓反引號不受影響。我相應地修改了你的答案。 – 2011-12-29 13:04:19

2

如果我沒有弄錯,你會錯過'1'和WHERE之間的空格。你應該使用反引號(')當你想逃避列名

所以,你的代碼就變成了:

$blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'") 

注意',而不是'繞柱名(SET之後)。

進一步可能的改進:

  1. 如果列是int類型的,你可以在'1'通過1更換(不「)
  2. 你不應該直接使用$_SESSION$_POST$_GET或其他值可以由用戶在您的查詢中更改。做SQL injection谷歌搜索以獲取更多信息
+0

仍顯示錯誤 – user1121083 2011-12-29 12:48:23

+1

您是否也照顧過Mark Ba​​ker的註釋(在列名稱周圍使用反引號,並且僅在需要時)? – Robin 2011-12-29 12:50:36

+0

不,我不知道他在做什麼,請解釋一下? – user1121083 2011-12-29 12:57:46

2
UPDATE user SET field = '1' WHERE ... 

,而不是

UPDATE user SET 'field' = '1' WHERE ... 

,如果你的領域是int類型,你可以使用

UPDATE user SET field = 1 WHERE 

如果你想逃避你的字段名稱,使用

`field` 

在反引號`

+0

如果你有「領域」進入會議virable $ _SESSION ['gymleader']我得到''布洛克'= 1其中用戶名='admin''如果你注意到有2''在brock這個詞的前面也許這就是問題所在? – user1121083 2011-12-29 12:57:19

+0

that would be mysql_query(「UPDATE users SET」。$ _ SESSION ['gymleader']。「='1'WHE ... – kontur 2011-12-29 13:05:41