2011-12-29 46 views
0

我遇到以下代碼的問題,它似乎工作並創建記錄就好了,問題是每次我點擊提交時,而不是更新記錄,它只是創建一個新的一。如果我關閉自動增量主鍵它更新記錄得很好,但隨後並沒有創建任何新的,似乎一個或另一個:-S關於DUPLICATE KEY UPDATE創建新記錄

<?php 
$query = mysql_query(" 
    INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    ('$_POST[cf_id]','$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]') 
    ON DUPLICATE KEY UPDATE 
    datesent='$_POST[datesent]'; 
") or die(mysql_error()); 
?> 
+1

發佈您的模式。 – 2011-12-29 23:23:49

+2

什麼是數據庫中的「唯一」或「主鍵」字段? – cheeken 2011-12-29 23:25:06

+0

不應該** $ _ POST [datesent] **是類似** $ _ POST的東西['datesent'] **? – 2011-12-29 23:27:06

回答

2

你已經嘗試回顯你的查詢字符串嗎?猜猜它裏面的變量替換是錯誤的。嘗試類似的東西進行調試:

<?php 
$sql = "INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    ('{$_POST['cf_id']}','{$_POST['cf_uid']}','{$_POST['emailformname']}','{$_POST['datesent']}') 
    ON DUPLICATE KEY UPDATE 
    datesent='{$_POST['datesent']}'"; 
echo $sql; // for debugging 
$query = mysql_query($sql) or die(mysql_error()); 
?> 

請注意上面修正的變量名稱。 (圍繞它的花括號,圍繞數組索引的引號)

+0

調試如下>> – 2011-12-29 23:45:53

+0

插入到hqfjt_chronoforms_data_emailform(cf_id,cf_uid,emailformname,datesent)VALUES('','8d50cf1becab8c90ec0e387a746da8c3','聖誕快樂','30-12-2011')ON DUPLICATE KEY UPDATE datesent =' 30-12-2011' – 2011-12-29 23:47:09

+1

你有它:後var'cf_id'是空的。檢查爲什麼它沒有發佈在POST的另一側。當auto_increment字段被INSERT爲空或NULL時,將使用新的自動遞增值。 – Kaii 2011-12-29 23:50:36

0

我無法想象它的問題,但是當您將ID轉換爲int並忽略引號時會發生同樣的情況嗎?

<?php 
$query = mysql_query(" 
    INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    (" . (int) $_POST['cf_id'] . ",'$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]') 
    ON DUPLICATE KEY UPDATE 
    datesent='$_POST[datesent]'; 
") or die(mysql_error()); 
?> 

順便說一句,你真的不應該在沒有mysql_real_escape_string或使用$_POST變量在查詢中更好的是,使用預準備語句(PDO或mysqli的)。

+0

這看起來沒有什麼區別,它仍然創建一個具有不同cf_id的新記錄,感謝您對POST的建議,我剛剛刪除了所有我可以調試的東西,因爲我不確定是什麼導致了這一點。 – 2011-12-29 23:52:13

相關問題