php - 如何防止在SQL中插入现有数据

标签 php mysql sql

我一直在编写代码来避免已经存在的数据插入,但我没有完成它,因为我必须处理系统的另一个重要功能,现在,当我想使用建议和答案将其编码回来时从这个网站上,我发现压力很大,因为我的SQL语句太拥挤,导致 fatal error ,现在我必须问当我想避免名为invoice的数据重复时应该在我的SQL行中添加什么。这是我构建代码的方式:

if($_POST["controller"] == "add") {
    // validations here
    if(empty($_POST["main_date"])) {
        echo 'error'; die();
    }else{
        // upload file
        $uniquesavename = time().uniqid(rand());
        $extension = pathinfo($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION);
        $target_dir = "../files/laboratory/receipt/";
        $uploadOk = 1;

        $target_file = $target_dir . $uniquesavename . '.' . $extension;

        // check filesize
        if ($_FILES["fileToUpload"]["size"] > 1000000) {
            $uploadOk = 0;
        }

        if ($uploadOk == 0) {
            echo 'error in upload attachment 1'; die();
        // if everything is ok, try to upload file
        } else {
            if (!move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
                // move file failed
                echo 'error in upload attachment 2'; die();
            }
        }
    }

    $result = $_POST["employee"];
    $result_explode=explode('|', $result);
    $result = query("INSERT INTO tbl_maintenance 
        (employee_id,
        carid,
        account_id,
        main_date,
        invoice,
        up_date,
        previous,
        present,
        particular,
        code,
        amount,
        attachment,
        dateAdded) 
        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", 
        $result_explode[1],  
        $_POST["platenumber"], 
        $_POST["account_id"], 
        $_POST["main_date"], 
        $_POST["invoice"], 
        $_POST["up_date"], 
        $_POST["previous"], 
        $_POST["present"], 
        $_POST["particular"], 
        $_POST["code"], 
        $_POST["amount"], 
        $target_file,
        date("Y-m-d"));
    if($result === false) {
        echo 'mali imong code'; die();
    }
    else {
        $row = query("SELECT LAST_INSERT_ID() AS mId");
        $id = $row[0]["mId"];
        redirect("maintenance.php?profile=" . $id);
    }
}

最佳答案

为此您不一定需要大量 PHP。您唯一需要的是:

try {
    $result = query($yourLongQuery);
} catch (Exception $e) {
    if(mysqli_errno() === '1062') {
        echo "Duplicate data!";
    } else {
        echo "Something went wrong!";
    }        
}

要实现此功能,您必须在表上定义 UNIQUES。默认情况下,主数据库始终是唯一的,但您可以使用以下命令添加更多 UNIQUE:

ALTER TABLE tableName ADD UNIQUE INDEX indexName (columnName);

如果您尝试插入重复项,则会出现错误代码 1062。您可以捕获该情况并做出相应 react 。

关于php - 如何防止在SQL中插入现有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167752/

相关文章:

php - 如何从大量数据创建数组?

PHP SQL UPDATE 数千行中每行一个字段,每个字段都在 php 中构建

mysql - 如何连接从组中聚合出来的列值?

mysql - 如何使用另一个计算平均值的查询的结果更新MySQL表

sql - MS Access 在所有列中循环联合查询?

php - 为什么 mysql ceil 日期时间字符串?

php - 如何解决错误 QXcbConnection : Could not connect to display when using exec function for phantomJs using PHP

javascript - 从 php 文件中获取 api (GET DATA)

php - 我想从数据库中选择随机行并按顺序列出它们。下面是代码

java - 试图将结果集值放入 map 中