2014-12-19 80 views
0

下面的代碼正確地更新了MySQL表,所以當有人在團隊中放入一個數字並在cp2_arrival中放入一個數字時,它會進入表格。但是,當我爲下一次輸入做同樣的事情時,它會創建一個新行並且不更新該團隊的現有行。更新現有的行而不是在MySQL中創建新的行

這是我的代碼

<?php 
$con=mysqli_connect("localhost","","",""); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to Database, Contact Control: " . mysqli_connect_error(); 
} 

// escape variables for security 
$Team = mysqli_real_escape_string($con, $_POST['Team']); 
$cp = mysqli_real_escape_string($con, $_POST['cp']); 


$sql="INSERT INTO checkpoints (Team, CP2_Arrival) 
VALUES (
'".$Team."', 
'".$cp."00' 
)"; 

if (!mysqli_query($con,$sql)) { 
    die('Error: ' . mysqli_error($con)); 
} 
echo "record added"; 

mysqli_close($con); 
?> 

任何幫助,將不勝感激。

+0

你需要做一個更新,而不是INSERT。 – idstam 2014-12-19 11:51:12

+0

ive將其更改爲Update並即時獲取錯誤:您的SQL語法中有錯誤;檢查與你的MySQL服務器版本相對應的手冊,在第1行的'INTO檢查點(Team,CP2_Arrival)VALUES('6','115900')'附近使用正確的語法。 – 2014-12-19 11:56:26

+0

對我來說,你需要做一個選擇,如果元素存在更新該行,否則創建一個新的 – 2014-12-19 11:57:28

回答

3

INSERT將總是創建一個新行(或出錯)。根據您的表格結構,您可能會這樣做:

$sql="INSERT INTO checkpoints (Team, CP2_Arrival) 
VALUES (
'".$Team."', 
'".$cp."00' 
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'"; 

但是,這需要Team列是唯一索引或主鍵。如果不是這種情況,則需要在表上進行某種檢查以確定是要插入還是更新,然後運行插入語句或運行更新語句,如下所示:

$sql="UPDATE checkpoints SET CP2_Arrivale='".$cp."00' WHERE Team='".$Team."'; 

如果你想在球隊列添加作爲主鍵試試:

所有的
ALTER TABLE checkpoints ADD PRIMARY KEY(Team); 
+0

即將寫入相同,ON DUPLICATE KEY UPDATE是OP的正確解決方案 – baao 2014-12-19 12:02:09

0

首先,據我瞭解,你可以定義Team列作爲主鍵(或唯一鍵)。 然後你可以使用如下語句:

$sql="INSERT INTO checkpoints (Team, CP2_Arrival) 
VALUES (
'".$Team."', 
'".$cp."00' 
) ON DUPLICATE KEY UPDATE CP2_Arrival = '".$cp."00'; 

在這種情況下,你會插入新行,如果沒有這樣的Team或其他情況更新CP2_Arrival。 你可以閱讀更多關於此這裏:insert-on-duplicate

您也可以使用REPLACEREPLACE Syntax),而不是INSERT(這也是必需的主/唯一鍵):

$sql="REPLACE INTO checkpoints (Team, CP2_Arrival) 
VALUES (
'".$Team."', 
'".$cp."00' 
)"; 
0

謝謝大家。我現在已經開始工作了。首先我將編碼改爲大多數人的建議(見下文)。同時截斷tabke然後讓Team成爲主鍵。測試這個,它現在正在工作

$sql="INSERT INTO checkpoints (Team, CP2_Arrival) 
VALUES (
'".$Team."', 
'".$cp."00' 
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'"; 
相關問題