我目前正在制作一个简单的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
列设置为唯一,以防止重复,但我这样做是为了显示错误消息。
答案 0 :(得分:3)
execute()
函数在成功时返回TRUE
或在失败时返回FALSE
。 0行不是失败的。使用num_rows
获取返回的行数。