2012-03-09 47 views
-1

第一我給你查詢,然後我會告訴你我想達到什麼,因爲我可能太錯了或者太靠近了。這個MySQL更新查詢有什麼問題?

 mysql_query("UPDATE link_building SET 
ID=$ID,Site=$Site,Date=$Date,Target_Site=$Target_Site, 
     Target_Contact_Email=$Target_Contact_Email, 
    Target_Contact_Name=$Target_Contact_Name, 
     Link_Type=$Link_Type,Link_Acquired=$Link_Acquired, 
    Notes=$Notes,Link_URL=$Link_URL WHERE ID=" . $ID); 

我想實現什麼? 我想更新表存儲在變量

("$ID","$Site","$Date","$Target_Site","$Target_Contact_Email","$Target_Contact_Name", 
"$Link_Type","$Link_Acquired","$Notes","$Link_URL") 

但我只是想更新的記錄衛生組織ID等於$ ID值link_building領域

("ID","Site","Date","Target_Site","Target_Contact_Email","Target_Contact_Name", 
    "Link_Type","Link_Acquired","Notes","Link_URL") 

更新:我沒有看到任何錯誤。 ITS REDIRECTS TO link_building.php並顯示成功消息,但不會更改MySQL表中的數據。

+4

您是否看到錯誤?如果是這樣,請將其發佈在您的問題中。 – Aaron 2012-03-09 15:15:42

+0

你沒有說出不應該發生的事情,但我會猜測:你沒有逃避你的變量,這是它的錯誤。參見http://www.php.net/manual/en/function.mysql-real-escape-string.php(從長遠來看,學習使用PDO將完全繞開這個問題:http://www.php。 net/manual/en/intro.pdo.php) – Piskvor 2012-03-09 15:16:10

+0

尋找具有您剛剛設置的特定'ID'的值有什麼意義? – 2012-03-09 15:17:21

回答

3

嘗試逃跑的數據,並自其已經在你的條件下去除ID的更新:

mysql_query("UPDATE link_building SET Site='".mysql_real_escape_string($Site)."',Date='".mysql_real_escape_string($Date)."',Target_Site='".mysql_real_escape_string($Target_Site)."', Target_Contact_Email='".mysql_real_escape_string($Target_Contact_Email)."', Target_Contact_Name='".mysql_real_escape_string($Target_Contact_Name)."', Link_Type='".mysql_real_escape_string($Link_Type)."',Link_Acquired='".mysql_real_escape_string($Link_Acquired)."', Notes='".mysql_real_escape_string($Notes)."',Link_URL='".mysql_real_escape_string($Link_URL)."' WHERE ID=" . intval($ID)); 
+2

此外,你可能想要mysql_real_escape_string($ var)每個變量。 – RumpRanger 2012-03-09 15:19:04

2

,如果你的列被命名爲喜歡Target Site(有一個空格),你應該ADRESS這樣說,這在你的查詢(這將迫使你添加反引號)。此外,您還必須向存儲其他字符串的列添加引號。您的查詢應該是這樣的:

UPDATE 
    link_building 
SET 
    ID = $ID, 
    Site = '$Site',     // single quotes for values 
    Date = '$Date',     // ... 
    ´Target Site´ = '$Target_Site' // and ´ for fields 
    [...] 

這應該解決爲什麼查詢不工作(除:個位或格式化不是如何使它更具可讀性)。

你沒有提供關於這方面的信息,但請注意,在使用它之前,你應該始終清理你的變量(你的代碼看起來不像你),以避免sql注入。你可以使用mysql_real_escape_string或更好的方法來開始使用prepared statements

2

首先,你忘了你還需要引用你的字符串;

mysql_query("UPDATE link_building SET Site='$Site', Date='$Date',". 
      "Target_Site='$Target_Site', Target_Contact_Email='$Target_Contact_Email',". 
      "Target_Contact_Name='$Target_Contact_Name', Link_Type='$Link_Type',". 
      "Link_Acquired='$Link_Acquired', Notes='$Notes', Link_URL='$Link_URL' ". 
      "WHERE ID=$ID"); 

注意在所有字符串周圍添加了'

獎勵備註;在將字符串傳遞給數據庫之前,您應該在字符串上使用mysql_real_escape_string()