2013-08-30 30 views
0

好吧,所以我需要檢查一個ip_adress是否已經在我的數據庫中,如果它是我需要更新行「訪問」並添加1.如果它不退出然後添加ip_adress我行 'ip_adress' 數據庫這裏是我的代碼:檢查數據庫中的重複項並運行一個函數

<?php include'connect.php'; 
//Test if it is a shared client 
if (!empty($_SERVER['HTTP_CLIENT_IP'])){ 
$ip=$_SERVER['HTTP_CLIENT_IP']; 
//Is it a proxy address 
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
$ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
}else{ 
$ip=$_SERVER['REMOTE_ADDR']; 
} 

$ip = ip2long($ip); 


$result = mysqli_query($con,"SELECT ip_adress FROM ip_visits"); 

while($row = mysqli_fetch_array($result)) 
{ 
    $ip_adress = $row['ip_adress']; 
    if($ip_adress === $ip){ 
     mysqli_query($con,"UPDATE ip_visits SET ip_adress = ip_adress + 1"); 
    }else{ 
     mysqli_query($con,"INSERT INTO ip_visits (ip_adress) VALUES ('$ip')"); 
    } 

}

mysqli_close($con); 
?> 
+0

有什麼問題嗎? – Rece

回答

0

ip_adress創建UNIQUE鍵,然後

INSERT INTO ip_visits (ip_adress) 
    VALUES ('$ip') 
    ON DUPLICATE KEY 
    UPDATE visits=visits+1 

除使用參數化查詢外。

+0

什麼是參數化查詢? –

+1

這是一個比現在更好的教程解釋的東西。 –

0

我認爲你正在尋找它的邏輯正是@Ignacio Vazquez-Abrams向你展示的。

它是這樣的:

1)告訴MySQL插入到所需的表。

2)解釋一下,如果發現重複密鑰,你寧願選擇更新它。

CODE:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE c=c+1; 

這將是或多或少等於說:

UPDATE table SET c=c+1 WHERE a=1; 

INSERT部分的優點是,僅在UPDATE會做什麼,如果它發現沒什麼被更新。因此,INSERT,UPDATE組合就像一石二鳥一樣。

你可以在這裏閱讀更多:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

只是一個側面說明,可以確保你的表中有至少一個主鍵和AUTO_INCREMENT場

相關問題