php - 如何防止在表中创建重复的 IP?

标签 php mysql myisam

我正在使用 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 地址完全相同)

这怎么可能?

额外信息:popupipuserid 是 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/

相关文章:

php - 为什么在 natsort/strnatcmp/strnatcasecmp 中忽略空格?

javascript - jQuery AJAX,使用 jQuery 从 HTML 数据属性获取变量,然后将其返回给 PHP

php - 从 in_array 语句获取值

php - mysql查询用like连接两个表

php - stripslashes 安全测试

php - 编辑 sudoers 文件不生效

mysql - 使用AES加密/解密在MySQL 5.5中解密MS SQL Server 2008 R2数据

mysql - InnoDB 可以使用停用词文件吗?

mysql - 运行 myisamchk --sort-records 后无意义的 SELECT 结果