好的所以我需要检查ip_adress是否已经在我的数据库中,如果我需要更新行'visit'并添加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 :(得分:0)
在UNIQUE
上创建ip_adress
密钥,然后
INSERT INTO ip_visits (ip_adress)
VALUES ('$ip')
ON DUPLICATE KEY
UPDATE visits=visits+1
除了使用参数化查询外。
答案 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
组合就像是一石二鸟。
您可以在这里阅读更多内容:
只需注意,请确保您的表至少包含主键和auto_increment字段