2012-12-18 18 views
8

Piszę wtyczkę dla Wordpressa, która powinna sprawdzić, czy wpis mysql już istnieje.
Jeśli nie istnieje, Wordpress powinien wstawić wpis do tabeli. Ta część działa zgodnie z oczekiwaniami.
Jeśli jednak istnieje już wpis w tabeli mysql, Wordpress powinien zaktualizować tabelę, ale to nie zadziała.Wordpress update mysql table

Kod używam tego jest następujący kod:

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time=$current_timestamp WHERE userid=$userid")); 

Zmienne używam w tym zapytaniu są prawidłowe, ponieważ są one z powodzeniem stosowane do wstawiania do tabeli, ale gdzieś po drodze coś nie działa z funkcją aktualizacji.

Czy ktoś może mi powiedzieć, co robię źle tutaj?
Jaki jest właściwy sposób postępowania?

Odpowiedz

11

wartość kolumny time należy dołączyć single quote

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid")); 
+0

Thank you so much! Wpatrywałem się w ślepotę na coś, co spodziewałem się znacznie bardziej skomplikować. Teraz działa idealnie. –

+3

ale zapytanie jest wrażliwe na "SQL Injection", proszę poświęć czas, aby przeczytać artykuł, aby temu zapobiec. [** Jak zapobiec iniekcji SQL w PHP **] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection) –

+0

Dzięki za udzielenie najprostszego sposobu wykonania kwerendy aktualizacji –

2
$result = $wpdb->update('westend_areaofficers', array('officerOrder' => $memberOrder, 
'officerTitle' => $memberTitle, 'officerName' => $memberName, 'officerPhone' => 
$memberPhone), array('officerId' => $memberId), array('%d','%s', '%s', '%s'), 
array('%d')); 

if($result > 0){ 
echo "Successfully Updated"; 
} 
else{ 
    exit(var_dump($wpdb->last_query)); 
} 
$wpdb->flush(); 

Powyższe rozwiązanie jest co pracował dla mnie, bo za pomocą $ wpbd-> zapytanie ($ wpbd-> Przygotowanie()) instrukcja nie działała nawet przy przekazywaniu poprawnych formatów liczb i ciągów znaków.
Celem funkcji var_dump() jest sprawdzenie, w którym przypadku wykonanie kwerendy poszło nie tak. Drukuje zapytanie i wartości przekazywane. Oczywiście przy użyciu funkcja $ wpdb-> flush() czyści pamięć podręczną, aby wykonać następne zapytanie.

1

Przykład:

zmiana użytkownika (o identyfikatorze 546) nicename do Harde_Bande

$execut= $wpdb->query($wpdb->prepare("UPDATE $wpdb->users SET user_nicename = %d WHERE ID = %s", "Harde_Bande", 546)); 
var_dump($execut); 

Dowiedz się więcej na stronie: http://codex.wordpress.org/Class_Reference/wpdb#Examples

0
UPDATE wp_options SET option_value = replace(option_value, 'http://www.example.com', 'http://localhost/test-site') WHERE option_name = 'home' OR option_name = 'siteurl'; 
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.example.com', 'http://localhost/test-site'); 
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.example.com','http://localhost/test-site'); 
Powiązane problemy