2012-12-18 75 views
8

我正在爲Wordpress寫一個插件,它應該檢查一個mysql條目是否已經存在。
如果它不存在Wordpress應該將條目插入表中。這部分按我的預期工作。
但是,如果在mysql表中已經有一個條目,Wordpress應該更新表,但這不起作用。WordPress的更新mysql表

我使用該代碼,這是下面的代碼:我在查詢中使用是正確的,因爲他們成功地插入表

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

的變量,但沿東西路某處更新功能出錯。

有人能告訴我我在做什麼錯嗎?
什麼是正確的方式去做這件事?

回答

11

time列的值必須與single quote

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

太謝謝你了!我正盯着我預計會更加複雜的事情。 它現在完美運作。 –

+3

但是查詢容易受到'SQL注入'的影響,請花時間閱讀文章以防止發生。 [**如何防止PHP中的SQL注入**](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection) –

+0

感謝您提供最簡單的方式來執行更新查詢 –

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

上述解決方案將封閉是什麼工作對我來說,因爲使用$ wpbd->查詢($ wpbd->準備()) 聲明即使在傳遞正確的數字和字符串格式時也不起作用。
var_dump()函數的用途是查看查詢 執行錯誤的位置。它打印出傳遞的查詢和值。當然,使用 $ wpdb-> flush()函數會清除緩存,以便執行下一個查詢。

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