2012-03-30 246 views
1

我有這個代碼的問題:PHP插入記錄到MySQL數據庫(多記錄被添加)

<?php 
$new_value = 'testing'; 

$con = mysql_connect("localhost","user","pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("my_db", $con); 

mysql_query("INSERT INTO myDB (myField) VALUES ('$new_value')"); 

mysql_close($con); 

?> 

2個問題正在發生:

月1日 - 2個記錄被插入,而不是1

2日 - $ NEW_VALUE沒有改變,它是創造多個實例時,我只想要1

+0

你的代碼在哪裏是$ new_value應該改變?或者你的意思是你一次又一次地將相同的值插入數據庫?這是正確的,因爲我沒有看到你指定任何關於唯一值或什麼都沒有。 – Bono 2012-03-30 10:37:13

+0

正確我一次又一次地將相同的值插入到數據庫中,只需要一個 – Satch3000 2012-03-30 10:38:47

+1

您確定您沒有執行過兩次代碼段(例如'include/require')嗎?似乎不可能插入兩個記錄而不是單個記錄...... – 2012-03-30 10:39:14

回答

3

我認爲這是類似於Wh是東西一樣$ NEW_VALUE值在你之後,讀您的評論後:

INSERT IGNORE INTO tablename (fields) 
VALUES(values); 

使用INSERT IGNORE,而不是INSERT。如果一條記錄沒有複製現有的記錄,MySQL會照常插入它。如果記錄是重複的,那麼IGNORE關鍵字告訴MySQL放棄它而不會產生錯誤。

編輯 或者作爲維陶塔斯指出;如果你想替換值使用替換INSERT

代替
+0

INSERT IGNORE仍然添加兩次 – Satch3000 2012-03-30 10:58:39

0

2日 - $ NEW_VALUE沒有改變,它的創建多個實例 用時,我只希望在同一$ NEW_VALUE值1

$ new_value在哪裏更改?它是如何改變的?你確定你沒有多次按下瀏覽器刷新按鈕嗎?

+0

只有1個$ new_value的實例,所以說,$ new_value ='Value1'; ...代碼在db表中添加兩次,我想避免重複 – Satch3000 2012-03-30 11:00:19

1

爲什麼不嘗試使用交易?它可以幫助你避免一些插入/更新錯誤:

try 
    { 

     // Start TRANSACTION 
     mysqli_autocommit($con, false); 

     mysqli_query('INSERT INTO table SET field = "'.$fieldValue.'"'); 

     // If there is no error then COMMIT 
     mysqli_commit($con);  

    } 
    catch(Exception $e) 
    { 

     // If there is an error, then rollback any INSERTS or UPDATES in the TRY block 
     mysqli_rollback($con); 

     $theError = $e->getMessage(); 
    } 

它強烈建議您使用數據庫時,使用try/catch塊在你的代碼。