2012-04-27 141 views
1

嘗試插入或更新時,沒有任何內容進入數據庫。 這是表格的佈局插入/更新查詢

(
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`thesis_Name` varchar(200) NOT NULL, 
`abstract` varchar(200) NOT NULL, 
`complete` int(2) NOT NULL DEFAULT '1', 
PRIMARY KEY (`id`), 
KEY `user_id` (`user_id`) 
) 

正如你所看到的ID是唯一的關鍵。 user_id是會話的內容。我希望它有可能爲user_id有兩行,所以只有id應該是唯一的,因此這應該是尋找是否插入或更新的關鍵。 這是我一直使用的是什麼:

​​

如果noway周圍則USER_ID可以是唯一的也只有1行每個用戶

+2

會發生什麼?是否報告錯誤?你的具體問題是什麼?或者我們應該只是和你一起猜測? – hakre 2012-04-27 13:29:19

+8

對於上帝之愛,請使用參數化查詢 – 2012-04-27 13:30:00

+3

如果您不知道Keith的含義,或者他爲什麼這麼說,請閱讀[Bobby Tables](http://bobby-tables.com) – eggyal 2012-04-27 13:30:48

回答

1

你能告訴我們最終的查詢?像這樣的東西$query = sprintf(...)後:

echo $query 

也許一個簡單的報價在你$abstract?您可以使用mysql_real_escape_string()到advoid它:

$thesis_Name = mysql_real_escape_string($thesis_Name); 
$abstract = mysql_real_escape_string($abstract); 
0
  1. 從MySQL得到一個錯誤,你必須使用mysql_error()功能。
  2. 你必須轉義你正在查詢的字符串。
  3. sprintf()在這裏沒有用處。

$user_id  = intval($_SESSION['user_id']);  
$id   = mysql_real_escape_string($_POST['id']); 
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']); 
$abstract = mysql_real_escape_string($_POST['abstract']); 

$query  = "INSERT INTO thesis (id, user_id, thesis_Name, abstract) 
       VALUES ('$id','$user_id', '$thesis_Name', '$abstract') 
       ON DUPLICATE KEY UPDATE 
        `thesis_Name` = VALUES(`thesis_Name`), 
        `abstract` = VALUES(`abstract`)"; 

mysql_query($query) or trigger_error(mysql_error()." ".$query); 

如果您使用的是mysql *函數。

然而,這是相當不尋常的做法
通常我們決定哪些查詢基於PHP的邏輯來使用,這樣

if ($_POST['id']) { 
    $query = "INSERT..." 
} else { 
    $query = "UPDATE..." 
} 
+0

感謝您的幫助。與此它添加插入,但增加了另一行(與same_id和不同的id),而不是更新我插入 – user1296762 2012-04-27 13:57:29

+0

好,起初我把用戶ID作爲唯一鍵。 – 2012-04-27 14:02:07

+0

所以現在使用頂級代碼,第二行不會被添加,但數據不會改變。按保存時,它只是將我重定向到正確的頁面。你是否建議嘗試你的第二段代碼呢? – user1296762 2012-04-27 14:14:52