За последние 24 часа нас посетили 22762 программиста и 1308 роботов. Сейчас ищут 927 программистов ...

Перезаписать базу через php

Тема в разделе "PHP и базы данных", создана пользователем dmitrylis, 12 фев 2024.

  1. dmitrylis

    dmitrylis Новичок

    С нами с:
    22 авг 2023
    Сообщения:
    13
    Симпатии:
    0
    Всем примет!
    Помогите разобраться с кодом.

    Есть код, который данные формате csv записывает в MYSQL.
    Но есть проблема, он не перезаписывает базу, а создает новые строки.

    Подскажите, пожалуйста, что нужно сделать чтобы он перезаписывал по ID
    [​IMG]
    [​IMG]
    Код (Text):
    1. <?php
    2. // (A) CONNECT TO DATABASE - CHANGE SETTINGS TO YOUR OWN!
    3. $dbHost = "localhost";
    4. $dbName = "test";
    5. $dbChar = "utf8mb4";
    6. $dbUser = "root";
    7. $dbPass = "";
    8. $pdo = new PDO(
    9.   "mysql:host=".$dbHost.";dbname=".$dbName.";charset=".$dbChar,
    10.   $dbUser, $dbPass, [
    11.   PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    12.   PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    13. ]);
    14.  
    15. // (B) READ UPLOADED CSV
    16. $fh = fopen($_FILES["upcsv"]["tmp_name"], "r");
    17. if ($fh === false) { exit("Failed to open uploaded CSV file"); }
    18.  
    19. // (C) IMPORT ROW BY ROW
    20. while (($row = fgetcsv($fh)) !== false) {
    21.   //print_r($row);
    22.   $stmt = $pdo->prepare("INSERT INTO `users` (`id`, `number`, `square`) VALUES (?,?,?)");
    23.   $stmt->execute([$row[0], $row[1]]);
    24. }
    25. fclose($fh);
    26. echo "DONE.";
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.840
    Симпатии:
    743
    Адрес:
    Татарстан
    ПриМет приМет....

    вместо INSERT нужно UPDATE ..... SET number = ?, square = ? WHERE id = ?
     
  3. dmitrylis

    dmitrylis Новичок

    С нами с:
    22 авг 2023
    Сообщения:
    13
    Симпатии:
    0
    Так ?
    Код (Text):
    1. $stmt = $pdo->prepare("UPDATE `users` SET  `number`='$number', `square`='$square' WHERE `id`='$id'";)
     
    #3 dmitrylis, 12 фев 2024
    Последнее редактирование: 12 фев 2024
  4. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    77
    Симпатии:
    15
    Нужно писать логику и обработчик.

    Например могут быть три случая:
    1) Только обновить существующие значения. update
    2) Только обновить существующие значения и добавить, если их нет - update + insert
    3) Очистить всю таблицу и загрузить данные из файла TRUNCATE `table` + INSERT INTO

    Обработать csv можно с помощью модуля PHPExcel (например)


    Просто для примера,
    Код (Text):
    1. INSERT INTO users (id, name) VALUES (:id, :name) ON DUPLICATE KEY UPDATE name = VALUES(name)
     
    artoodetoo нравится это.
  5. dmitrylis

    dmitrylis Новичок

    С нами с:
    22 авг 2023
    Сообщения:
    13
    Симпатии:
    0
    Тут понятно , буду гуглить. Спасибо
     
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Добрый день!
    Задача такая - необходимо дополнять строки, с id которых нет и делать update ранее сохранённых строк.
    Так?
    Для начала Вам нужно очистить таблицу.
    Затем так изменить структуру:
    Код (Text):
    1. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    2. ...
    3. UNIQUE (id)
    и добавить в запрос ON DUPLICATE KEY UPDATE
    PHP:
    1. $stmt = $pdo->prepare("INSERT INTO `users` (`id`, `number`, `square`) VALUES (?,?,?)
    2. ON DUPLICATE KEY UPDATE  number = ?, square = ?;");
    Удачи!
     
  7. dmitrylis

    dmitrylis Новичок

    С нами с:
    22 авг 2023
    Сообщения:
    13
    Симпатии:
    0

    Задача обновлять Базу данных через файл. (делать update ранее сохранённых строк.)

    Спасибо за развернутый ответ.
     
  8. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Советую Вам убрать дубликаты строк из таблицы и изменить структуру поля "id".
    и наверное, надо иметь ввиду, что в импортированных данных, чисто случайно, могут оказаться раннее не сохранённые строки.
    Поэтому надёжнее применить INSERT INTO users ... ON DUPLICATE KEY UPDATE