2012-12-18 47 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');