Как узнать, существуют ли строки в базе данных при вставке нескольких строк одной отправкой

0

Новичок просит помощи здесь. Я создал многократную форму вставки, где 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();
    }
    }

?>
  • 0
    В этом коде много неправильных вещей. 1) Расовые ограничения возможны, потому что вы выбираете для проверки дубликат, а затем вставляете, если он не существует, в идеале вы должны быть уникальным ключом в базе данных 2) Возможны инъекции SQL mysqli_escape_string() не полностью защищает 3) echo "You forgot to fill in all fields!"; header("refresh:2; url=$page"); делать вывод перед HTTP-заголовком, который не разрешен.
  • 0
    вам нужно показать ошибку, если она уже вставлена или вы просто хотите пропустить?
Показать ещё 5 комментариев
Теги:
multiple-insert

2 ответа

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");
}
?>
0

MySQL ON DUPLICATE KEY UPDATE для вставки нескольких строк в одном запросе

это должно указать вам, куда вам нужно идти.

Не забывайте, что использование rowCount для дубликата может вводить в заблуждение, поскольку возвращает 1 для вставки и 2 для обновления (по крайней мере, с PDO) - я позволю кому-то еще дать вам лекцию в течение всего срока с использованием подготовленных выражений

Ещё вопросы

Сообщество Overcoder
Наверх
Меню