🢂InsertOrUpdate w PHP ‑ funkcja której nie ma a wszyscy potrzebują

Funkcja insertOrUpdate, realizuje operację wstawiania lub aktualizowania rekordu w bazie.

Funkcja insertOrUpdate

  • Funkcja insertOrUpdate przyjmuje trzy argumenty: nazwę tabeli, tablicę danych do wstawienia lub aktualizacji oraz listę kolumn do aktualizacji.
  • Połączenie z bazą danych jest nawiązywane za pomocą funkcji polacz_z_baza (szukaj na blogu).
  • Funkcja zwraca liczbę wierszy, które zostały zmodyfikowane przez zapytanie.

Pamiętaj, że do korzystania z tej funkcji potrzebne będzie prawidłowe połączenie z bazą danych oraz tabela, która ma odpowiednio skonfigurowany klucz główny lub unikalny indeks, aby instrukcja ON DUPLICATE KEY UPDATE działała poprawnie.

<?php
function insertOrUpdate($tableName, $data, $updateColumns)
{
  // Nawiązanie połączenia z bazą danych (szukaj na blogu)
  $pdo = polacz_z_baza();

  // Budowanie części INSERT zapytania
  $columns = implode(", ", array_keys($data));
  $values = ":" . implode(", :", array_keys($data));

  // Budowanie części ON DUPLICATE KEY UPDATE
  $updateQuery = "";
  foreach ($updateColumns as $column) {
    $updateQuery .= "$column = VALUES($column), ";
  }
  $updateQuery = rtrim($updateQuery, ", ");

  // Pełne zapytanie SQL
  $sql = "INSERT INTO $tableName ($columns) VALUES ($values)
            ON DUPLICATE KEY UPDATE $updateQuery";

  // Wykonanie zapytania
  try {
    $stmt = $pdo->prepare($sql);
    foreach ($data as $key => $value) {
      $stmt->bindValue(':' . $key, $value);
    }
    $stmt->execute();
    return $stmt->rowCount();
  } catch (PDOException $e) {
    // Obsługa błędów
    die("Błąd bazy danych: " . $e->getMessage());
  }
}

Jak używać insertOrUpdate?

Poniżej przykład.

<?php,mysql
 $data = ['id' => 1, 'name' => 'Nowa Nazwa', 'age' => 30];
 $updateColumns = ['name', 'age'];
 insertOrUpdate('users', $data, $updateColumns);