12

我正在为 Wordpress 编写一个插件,它应该检查一个 mysql 条目是否已经存在。
如果它不存在,Wordpress 应该将条目插入到表中。这部分按我的预期工作。
但是,如果 mysql 表中已经有一个条目,Wordpress 应该更新该表,但这不起作用。

我为此使用的代码是以下代码:

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

我在此查询中使用的变量是正确的,因为它们已成功用于插入表中,但在更新功能出现问题的过程中某处。

有人可以告诉我我在这里做错了什么吗?
解决这个问题的正确方法是什么?

4

5 回答 5

15

列的值time必须用single quote

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid"));
于 2012-12-18T15:43:58.917 回答
6
$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->query($wpbd->prepare()) 语句也不起作用。
var_dump() 函数的目的是查看查询的执行出错的地方。它打印出正在传递的查询和值。当然,使用 $wpdb->flush() 函数会清除缓存以供下一个要执行的查询。

于 2014-02-02T11:56:40.830 回答
2
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');
于 2016-10-26T08:54:21.573 回答
0

例子:

将用户(其 ID 为 546)的 nicename 更改为Harde_Bande

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

了解更多信息: http ://codex.wordpress.org/Class_Reference/wpdb#Examples

于 2014-02-19T09:25:11.007 回答
0

很简单

global $wpdb;

$execut= $wpdb->query("UPDATE `IK_users` SET `user_nicename` = 'amit' WHERE `IK_users`.`ID` = 19");

var_dump($execut);

'IK_users' 是自定义表名,将其替换为您自己的表名,如 'wp_users'

于 2021-09-07T09:22:22.047 回答