我正在使用 MySQL myisam 和一些 php 代码来防止在 popupip
表中创建重复的 ip
$userip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$date = date('Y-m-d');
$result = mysql_query("SELECT `ip` FROM `popupip` where ip = '$userip' AND userid = $secid AND date='$date'");
$num = mysql_num_rows($result);
if ($num > 0) {
// **it is duplicate Do not insert it in popupip table**
}else{
// **it is not duplicate ip insert it in popupip table**
}
上面的代码是一个示例。我知道完整的代码。
但是当我查看 phpmyadmin popupip
表时,用户有一些重复的 IP(同一日期的用户的 IP 地址完全相同)
这怎么可能?
额外信息:
在 popupip
中 userid
是 int(11) , date
是“日期类型,如 2014-05-30”,ip
> 是 varchar。
该页面可能会通过弹出页面“尽可能快地同时”打开。
用户同时快速打开一个页面和重复创建IP之间有关系吗?
MySQL有bug吗? (也许是一个大错误!!!!)
最佳答案
以下是 future 的概述。
注意:我并不是说这是最好的方法,但我会尽力提供帮助。
首先,删除 popupip
中的所有数据,以便删除所有重复项。
然后首先,获取客户端的 IP。 $client_ip = get_ip();
function get_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'Unknown IP';
return $ipaddress;
}
因此$client_ip
具有用户IP 的值。 (显然)
因此判断用户是否已经在数据库中拥有该IP。
$query = $this->db->prepare("SELECT ip_address FROM accounts WHERE user_id = :user_id AND client_ip = :client_ip");
$query->execute(array(':user_id' => $user_id, ':client_ip' => $client_ip));
// No IP in the table
if ($query->rowCount() == 0) {
//Put INSERT SQL here.
}
关于php - 如何防止在表中创建重复的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866372/