Nie jestem obco zaznajomiony z WPDB lub SQL w ogóle, ale mam niestandardową tabelę dla mojego projektu i próbuję przypisać do niej metadane. To, co „chciałbym” zrobić, to jeśli istnieje wiersz, zaktualizuj go, a jeśli nie, wstaw go. Przeczytałem zarówno Wstawianie, jak i Aktualizuj w Kodeksie WPDB, ale tak naprawdę żaden z nich nie znalazł się w sytuacji „albo”, albo Myślałem, że mogę pracować z aktualizacją, więc mój kod do tej pory wygląda następująco:
$wpdb->update(
$wpdb->prepare(
$wpdb->prefix.'item_info',
array(
'post_id' => $post_id,
'item_stock' => $item_stock
),
array('post_id' => $post_id)
)
);
Czy WordPress ma coś takiego jak „JEŚLI istnieje aktualizacja, Wstawianie ELSE”, czy muszę uruchomić niestandardowy SQL, aby to osiągnąć, czy też muszę najpierw zapytać bazę danych, aby sprawdzić, czy w mojej tabeli istnieje identyfikator, NASTĘPNIE zdecydować, czy zaktualizować to czy wstawić?
Czy próbowałeś
$wpdb->replace
. Według WP Codex:Zamień wiersz w tabeli, jeśli istnieje, lub wstaw nowy wiersz do tabeli, jeśli wiersz jeszcze nie istnieje.
Próbowałem się w niektórych wtyczkach i działa to, gdy próbuję uniknąć błędów powielania unikalnych identyfikatorów itp.
Więcej informacji w kodeksie
źródło
$wpdb->replace
jest to destrukcyjne zastąpienie całego rekordu, podczas gdy$wpdb->update
aktualizuje tylko określone pola zawarte w$data
tablicyPowinieneś sprawdzić, czy wiersz istnieje pierwszy.
Najprawdopodobniej będziesz chciał uzyskać identyfikator lub klucz podstawowy dla wiersza, który próbujesz zaktualizować, a
$wpdb->update
jeśli tak,$wpdb->insert
to nieźródło