Php 重复密钥更新时的Sql不';行不通
我试图在新计算机访问页面时插入新行(ip),但如果密钥(ip)已经存在,我只想更新访问计数器 代码:Php 重复密钥更新时的Sql不';行不通,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我试图在新计算机访问页面时插入新行(ip),但如果密钥(ip)已经存在,我只想更新访问计数器 代码:mysqli_查询($con,“在重复密钥更新ip_计数=ip_计数+1)时插入ip_地址(ip,ip_计数)值(INET_ATON(“$ip”),1) 4次刷新后的结果: $ipaddr=<YOUR IP ADDRESS>; $sql="update ip_address set ip_count=ip_count+1 where ip_address='".$ipadd
mysqli_查询($con,“在重复密钥更新ip_计数=ip_计数+1)时插入ip_地址(ip,ip_计数)值(INET_ATON(“$ip”),1)代码>
4次刷新后的结果:
$ipaddr=<YOUR IP ADDRESS>;
$sql="update ip_address set ip_count=ip_count+1 where ip_address='".$ipaddr."'";
mysqli_query($con,$sql);
$ipaddr=;
$sql=“更新ip_地址集ip_计数=ip_计数+1,其中ip_地址=”””“$ipaddr。””;
mysqli_查询($con,$sql);
希望它能工作。您也许应该使用PHP来验证它是否已经存在
这只是一个例子,请使用注入安全方法,并为语法错误道歉,只是试图在这里显示“逻辑”
基本上,它通过提供的IP选择数据。如果找不到,它将插入一条新记录。如果是,它将获取最大ip_计数值并用+1更新它
同样,这很可能不适用于复制和粘贴,您必须将其调整到您的脚本。和ip
是主键吗?我怀疑ip
是主键。查询是正确的,但ip
不是唯一的键。要实现您想要的功能,您需要将ip
设置为主键或唯一索引。-1这不是原子性的,在执行并发更新时会导致数据损坏,可能是重复的行或错误的计数
$ip = '' // the way you save the IP address can be put here
$exists = "SELECT * FROM ip_address WHERE`ip` = '" . $ip . "'";
if(mysql_num_rows($exists) == 0)
{
$insert = "INSERT INTO ip_address(ip, ip_count) VALUES (INET_ATON('".$ip."'),1)";
$mysql_query($insert);
}
else
{
while($result = mysql_fetch_assoc($exists))
{
$newCount = max($result['ip_count']) + 1;
$update = "UPDATE ip_address SET ip_count = " . $newCount . " WHERE ip = '" . $ip . "'";
}
}