2011-04-30 42 views
0

此查詢有什麼問題?SQL和PHP問題

$query3 = "INSERT INTO Users 
      ('Token','Long','Lat') 
      VALUES 
      ('".$token."','".$lon1."','".$lat."')"; 
+0

你也使用mysql_query()執行它嗎? – 2011-04-30 16:46:31

+0

請給我們完整的查詢。我們怎麼知道$ token,$ lon1和$ lat是什麼? – Alp 2011-04-30 16:46:56

+3

我不知道。此查詢有哪些*錯誤?即當你使用它時會發生什麼? – 2011-04-30 16:47:08

回答

6

您有這幾個問題保留字。

  1. 列名應BACKTICK逃脫了,沒有報價(也早就是MySQL中的數據類型,因此它保留和必須被反引號轉義)。
  2. 如果這些參數沒有轉義,那麼您有SQL注入問題。
  3. 如果它不起作用,您應該向我們提供mysql_error()的結果。

嘗試運行這段代碼:

$token = mysql_real_escape_string($token); 
$lon1 = mysql_real_escape_string($lon1); 
$lat  = mysql_real_escape_string($lat); 

$query3 = "INSERT INTO `Users` (`Token`, `Long`, `Lat`) 
      VALUES ('{$token}', '{$lon1}', '{$lat}')"; 
$result3 = mysql_query($query3) or die("Query Error: " . mysql_error()); 

如果仍然無法正常工作,給我們的出品的錯誤消息。

+0

謝謝。這工作 – flaviusilaghi 2011-04-30 17:02:39

1
  1. 你周圍使用字段名的單引號。這在我所知的任何SQL變體中都是無效的。要麼擺脫它們,要麼以正確的方式爲SQL風格引用字段名稱。
  2. 您的代碼很可能具有SQL注入漏洞,除非您遺漏了可跳過$token等的代碼
  3. 您不應該像這樣將值放入SQL字符串中。這不是20世紀90年代 - 我們現在已經參數化查詢。
  4. mysql_函數使正確查詢有點困難。切換到mysqli或PDO。
4

Longmysql reserved word,需要反引號

$query3 = "INSERT INTO Users 
      (`Token`,`Long`,`Lat`) 
      VALUES 
      ('".$token."','".$lon1."','".$lat."')"; 
+0

..並將引號中的字段名稱封閉_won't work_。 – 2011-04-30 17:09:33

+0

@Tom:這已經在我的答案中顯示,但沒有任何文字希望你也看到這個 – 2011-04-30 17:11:21

+0

@ShaktiSingh:_I_看到它。問這個問題的人看到了嗎? – 2011-04-30 17:11:38