2012-12-18 18 views
8

Ich schreibe ein Plugin für Wordpress, das überprüfen sollte, ob ein MySQL-Eintrag bereits existiert.
Wenn es nicht existiert Wordpress sollte den Eintrag in die Tabelle einfügen. Dieser Teil funktioniert wie erwartet.
Wenn jedoch bereits ein Eintrag in der Tabelle mysql vorhanden ist, sollte Wordpress die Tabelle aktualisieren, aber das funktioniert nicht.Wordpress update mysql Tabelle

Der Code, den ich dafür bin mit dem folgenden Code ein:

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

Die Variablen I in dieser Abfrage sind richtig, weil sie erfolgreich in die Tabelle einzufügen verwendet, aber irgendwo auf dem Weg etwas geht falsch mit der Update-Funktion.

Kann mir bitte jemand sagen, was ich hier falsch mache?
Was ist der richtige Weg?

Antwort

11

der Wert der Spalte time muss eingeschlossen werden mit single quote

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

Thank you so much! Ich starrte mich blind auf etwas an, von dem ich erwartete, dass es viel komplizierter war. Es funktioniert jetzt perfekt. –

+3

aber die Abfrage ist anfällig mit 'SQL Injection', bitte nehmen Sie sich Zeit, den Artikel zu lesen, um davon zu verhindern. [** Wie verhindere ich die SQL-Injection in PHP **] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection) –

+0

Vielen Dank für die einfachste Möglichkeit, die Update-Abfrage auszuführen –

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(); 

Die obige Lösung ist das, was für mich gearbeitet, weil die $ wpbd-> query ($ wpbd-> prepare()) mit Die Anweisung funktionierte nicht, selbst wenn die richtigen Zahlen- und String-Formate übergeben wurden.
Der Zweck der var_dump() - Funktion ist es, zu sehen, wo die Ausführung der Abfrage falsch ging. Es gibt die Abfrage und die übergebenen Werte aus. Unter Verwendung von löscht die Funktion $ wpdb-> flush() den Cache für die Ausführung der nächsten Abfrage.

1

Beispiel:

Änderung des Benutzers (dessen ID 546) nicename zu Harde_Bande

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

Erfahren Sie mehr unter: 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');