如果记录不存在,我怎么才能插入记录?

时间:2014-05-05 17:45:10

标签: php mysql sql

我目前正在制作一个简单的IP禁止脚本,我正处于将IP地址插入数据库的阶段。我为此创建的HTML表单包含两个字段; IP地址和原因:

<td width="70%"><h4>Ban New IP:</h4>(Enter IP to be banned)</td>
    <td width="30%">
    <form method="post" action="">
     IP Address: <input type="text" id="ip" name="ip" autocomplete="off" maxlength="15" /><br /><br />
     Enter Reason: <input type="text" id="reason" name="reason" autocomplete="off" maxlength="255" /><br /><br />
     <input type="submit" id="submit" name="submit" value="Ban IP" /><br /><br />

我的数据库包含一个标题为banned_ips和三列id, ip and reason的表格。我创建的插入语句完美无缺,但是我想查看IP是否已经存在。目前它只会插入IP,即使有一个匹配它。这是我目前的查询:

<?php

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

            $ip_clean = htmlentities($ip);

            if (isset($ip_clean)) {
                // SQL insert
                $insert_ip = $db->prepare("INSERT INTO `banned_ips` (ip) VALUES (?)");
                $insert_ip->bind_param('s', $ip_clean);

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

 ?>

我想要做的是在插入新IP时检查IP地址是否已经存在。我已经查看了有关stackoverflow的其他问题以及我看到WHERE NOT EXISTS的很多时间,但是我找到的没有显示任何带有预处理语句的示例。

3 个答案:

答案 0 :(得分:5)

只需将ip字段设为唯一字段。

然后

mysql将阻止重复

答案 1 :(得分:2)

您可以创建ip列UNIQUE并通过这样做,如果存在相同的IP,则不会插入它或执行如下查询:

$check_ip = $db->prepare("SELECT `ip` FROM `banned_ips` WHERE `ip` = ?");
$check_ip->bind_param('s', $ip_clean);
$res = $check_ip->execute();
if($res) {
    echo "IP Already exists";
} else {
    //insert it to db
}

如果您先放入代码,它将检查IP是否存在,如果存在则不会插入其他内容,如果它不存在则会将其插入数据库。

答案 2 :(得分:0)

你有两种方式:

1)使ip成为一个唯一的密钥,比你尝试编写相同的ip语句时,给你一个错误。

2)进行先前的查询,检查ip是否已存储在您的表格中。

无论如何,第一个解决方案是最好的!

再见