检查数据库中是否存在IP地址的问题

时间:2014-05-05 18:48:10

标签: php sql mysqli

我目前正在制作一个简单的IP地址禁止脚本,我正处于管理员输入要插入数据库的新IP地址的阶段。我遇到的问题是,即使我输入的数据库中尚未存在的IP地址,我检查IP地址是否已经存在也始终返回IP address is already banned

我的数据库由一个名为banned_ips的表和三列组成; id, ip and reason

这是我的问题:

if ($_POST) {
    if ($_POST['ip'] != '' && $_POST['reason'] != '') {
        if (strlen($_POST['ip']) <= 15 && strlen($_POST['reason']) <= 255) {
            $ip = $_POST['ip'];
            $reason = $_POST['reason'];

            $ip_clean = htmlentities($ip);
            $reason_clean = htmlentities($reason);

            if (isset($ip_clean, $reason_clean)) {
                $check_ip = $db->prepare("SELECT `ip` FROM `banned_ips` WHERE `ip` = ? LIMIT 1");
                $check_ip->bind_param('s', $ip_clean);
                $res = $check_ip->execute();
                if ($res) {
                    $_SESSION['ip_exists'] = 'Exists';
                } else {
                $insert_ip = $db->prepare("INSERT INTO `banned_ips` (ip, reason) VALUES (?, ?)");
                $insert_ip->bind_param('ss', $ip_clean, $reason_clean);

                if ($insert_ip->execute()) {
                    // Successful insert
                    $_SESSION['successful_insert'] = 'Success';
                       }
                    }
                }
            }
        }
    }

换句话说,我的问题是,即使我试图禁止表中尚不存在的IP,它也认为确实如此。我已将ip列设置为唯一,以防止重复,但我这样做是为了显示错误消息。

1 个答案:

答案 0 :(得分:3)

execute()函数在成功时返回TRUE或在失败时返回FALSE。 0行不是失败的。使用num_rows获取返回的行数。