0

わかりましたので、行「visit」を更新して1を追加する必要がある場合は、ip_adressが既にデータベースにあるかどうかを確認する必要があります。終了しない場合は、行「ip_adress」でデータベースにip_addressを追加しますここに私のコードがあります:

<?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);
?>
4

2 に答える 2

0

UNIQUEキーを作成しip_adressてから

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

パラメータ化されたクエリを使用することを除いて。

于 2013-08-30T03:14:01.027 に答える
0

あなたが探しているロジックは、まさに @Ignacio Vazquez-Abrams が示したものだと思います。

こんなふうになります:

1) 目的のテーブルに挿入するように MySql に指示します。

2) 重複キーが見つかった場合に備えて、UPDATE よりも優先することを説明します。

コード:

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 フィールドがあることを確認してください

于 2013-08-30T03:47:02.410 に答える