2012-12-18 10 views
8

Sto scrivendo un plugin per Wordpress, che dovrebbe verificare se esiste già una voce mysql.
Se non esiste Wordpress dovrebbe inserire la voce nella tabella. Questa parte funziona come mi aspettavo.
Tuttavia, se c'è già una voce nella tabella mysql, Wordpress dovrebbe aggiornare la tabella, ma questo non funziona.Wordpress aggiorna la tabella mysql

Il codice che sto usando per questo è il seguente codice:

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

Le variabili che uso in questa query sono corretti, perché sono utilizzati con successo per inserire nella tabella, ma da qualche parte lungo la strada qualcosa va male con la funzione di aggiornamento.

Qualcuno può dirmi per favore cosa sto facendo male qui?
Qual è la strada giusta da fare per questo?

risposta

11

il valore della colonna di time deve essere allegata single quote

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

grazie mille! Stavo fissando cieco su qualcosa che mi aspettavo di essere molto più complicato. Funziona perfettamente ora. –

+3

ma la query è vulnerabile con 'SQL Injection', per favore prenditi il ​​tempo di leggere l'articolo per prevenirlo. [** Come prevenire l'SQL injection in PHP **] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection) –

+0

Grazie per aver dato il modo più semplice per eseguire la query di aggiornamento –

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

La soluzione di cui sopra è quello che ha funzionato per me, perché utilizzando la query $ wpbd-> ($ wpbd-> prepare()) la dichiarazione non funzionava anche quando si passava nel numero corretto e nei formati di stringa.
Lo scopo della funzione var_dump() è vedere dove l'esecuzione della query è andata storta. Stampa la query e i valori passati. Ovviamente usando la funzione $ wpdb-> flush() cancella la cache per la successiva query da eseguire.

1

Esempio:

cambiamento dell'utente (il cui ID è 546) nicename a Harde_Bande

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

Ulteriori informazioni presso: 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');