一个提交插入多行时如何确定数据库中是否存在行

时间:2019-03-26 13:25:07

标签: php mysql multiple-insert

新手在这里寻求帮助。我创建了一个多重插入表单,其中包含3个字段。假设字段的名称为:“名称”,“姓氏”和“年龄”。如果数据库中没有相同的数据,我想将它们插入数据库中。如何检查那里是否已有数据?

当我尝试仅将一条记录插入数据库时​​,检查同一条记录是否已经保存在数据库中是一件很容易的工作。当我尝试将多个记录插入同一数据库时,会出现问题。在多记录情况下,我必须使用foreach循环才能成功,但是我不知道该怎么做。 预先感谢您的帮助。

<?php

include('../mysqli_connect3.php');
include 'includes/header.html';
$page = 'quest_insert.php';

for($i = 0; $i < $_POST['numbers']; $i++) {
    if (!empty($_POST["name"][$i]) && !empty($_POST["surname"][$i]) && !empty($_POST["age"][$i])) {
        $sql = mysqli_query($dbc, "SELECT name, surname, age FROM users WHERE 'name' = '".$_POST['name'][$i]."' AND 'surname' = '".$_POST['surname'][$i]."' AND 'age' = '".$_POST['age'][$i]."'");
        if (mysqli_num_rows($sql) > 0) {
        echo "Data '" . $name[$i] . "' and '" . $surname[$i] ."' are already saved in database!";
        mysqli_close($dbc);
        header("refresh:5; url=$page");

        } else {
        $name[$i] = mysqli_escape_string($dbc, $_POST["name"][$i]);
        $surname[$i] = mysqli_escape_string($dbc, $_POST["surname"][$i]);
        $age[$i] = ($_POST["age"][$i]);
        mysqli_query($dbc, "INSERT INTO users (name, surname, age) VALUES ('".$_POST['name'][$i]."', '".$_POST['surname'][$i]."','".$_POST['age'][$i]."')");
        echo "Data '" . $name[$i] . "' and '" . $surname[$i] ."' are inserted into database! <br />";
        header("refresh:6; url=$page");
    }} else {
        echo "You forgot to fill in all fields!";
        header("refresh:2; url=$page");
        exit();
    }
    }

?>

2 个答案:

答案 0 :(得分:0)

MySQL ON DUPLICATE KEY UPDATE for multiple rows insert in single query

这应该指出您需要去的地方。

请记住,在重复上使用rowCount可能会产生误导,因为它返回1表示插入,返回2表示更新(至少使用PDO)-我会让其他人使用准备好的语句为您讲课< / p>

答案 1 :(得分:0)

感谢所有建议。 我对代码进行了如下更改,并需要获得更多反馈:

<?php

include('../mysqli_connect3.php');
include 'includes/header.html';
$page = 'quest_insert.php';

for($i = 0; $i < $_POST['numbers']; $i++) {
    if (!empty($_POST["name"][$i]) && !empty($_POST["surname"][$i]) && !empty($_POST["age"][$i])) {
        $sql = mysqli_query($dbc, "INSERT INTO fi_fa (name, surname, age) VALUES '".$_POST['name'][$i]."', 'surname' = '".$_POST['surname'][$i]."', 'age' = '".$_POST['age'][$i]."' WHERE NOT EXISTS( SELECT name, surname, age FROM fi_fa WHERE name = '".$_POST['name'][$i]."' AND surname = '".$_POST['surname'][$i]."' AND age = '".$_POST['age'][$i]."') LIMIT 1");
        echo "Data has been saved successfully.";
        }
    } else {
        echo "You forgot to fill in all fields!";
header("refresh:2; url=$page");
}
?>