PHP MYSQL可以防止基于某些列的重复

时间:2017-02-22 12:28:00

标签: php mysql

例如,我有一张桌子:

 $(document).delegate('#cover-image','change', function(e){
    $('.update-img').hide();
    $('#Image1').hide();
    $('#loader1').show();
    var reader = new FileReader();
    reader.onload = function (e) {      
        var image = new Image();
        //Set the Base64 string return from FileReader as source.
        image.src = e.target.result;
        $('#Image1').attr("src",image.src);

        image.onload = function () {
            var height = this.height;
            var width = this.width;
            // alert(height+"and"+width);
            var jcrop_api = $('#Image1').Jcrop({
                trueSize: [width, height],
                onChange: SetCoordinates,
                onSelect: SetCoordinates
            })
        }

    }
    reader.readAsDataURL($(this)[0].files[0]);
    // jcrop_api.destroy();
});

我如何防止居住在第6大道17号的重复录入John Smith,但允许住在Devoe Ave的一些John Smith?

我有更多列,但我想防止重复只基于FName,LName,Street和Number ......

2 个答案:

答案 0 :(得分:1)

在FName,LName,Street和Number上创建唯一索引... 这将使插入重复的insert语句失败,然后您可以在代码中捕获异常并在发生这种情况时执行某些操作。 我已经更新了我的答案,包括一个PDO示例:

<?php
$dbhost = "localhost";
$dbname = "pdo";
$dbusername = "root";
$dbpassword = "your password";

$link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword");

$statement = $link->prepare("INSERT INTO testtable(fname, lname, street, number)
        VALUES(:fname, :lname, :street, :number)");

try {
    $statement->execute(
        array(
            'fname' => 'John',
            'lname' => 'Smith',
            'street' => '6th Ave',
            'number' => '17',
        )
    );
} catch (PDOException $e) {
    if ($e->errorInfo[1] == 1062) {
        // duplicate entry
    } else {
        //other error
    }
}

答案 1 :(得分:0)

第一步是在表格上设置一个唯一键,如下所示:

ALTER TABLE table ADD UNIQUE KEY (FName,LName, Street, Number)

然后使用INSERT IGNORE将数据添加到其中。任何导致这两列中的重复条目组合的INSERTS现在将返回MySQL错误而不是通过。

注意:使用INSERT后,UNIQUE语句会被悄悄忽略。