Wordpress 更新 mysql 表

Posted

技术标签:

【中文标题】Wordpress 更新 mysql 表【英文标题】:Wordpress update mysql table 【发布时间】:2012-12-05 20:44:53 【问题描述】:

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

我使用的代码如下:

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

我在这个查询中使用的变量是正确的,因为它们被成功地用于插入到表中,但是在更新函数的某个地方出现了问题。

谁能告诉我我在这里做错了什么? 解决这个问题的正确方法是什么?

【问题讨论】:

【参考方案1】:

time 列的值必须用single quote 括起来

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

【讨论】:

非常感谢!我盯着自己看的东西,我预计会更复杂。现在完美运行。 但是SQL Injection的查询容易受到攻击,请花点时间阅读文章以防止它。 How to prevent SQL injection in php 感谢您提供执行更新查询的最简单方法【参考方案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->query($wpbd->prepare()) 即使传入正确的数字和字符串格式,语句也不起作用。 var_dump() 函数的目的是查看查询的执行位置 出错。它打印出查询和传递的值。当然使用 $wpdb->flush() 函数清除缓存以供下一个要执行的查询。

【讨论】:

【参考方案3】:

示例:

将用户(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

【讨论】:

【参考方案4】:
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');

【讨论】:

【参考方案5】:

很简单

global $wpdb;

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

var_dump($execut);

'IK_users'是自定义表名,替换成你自己的表名,比如'wp_users'

【讨论】:

以上是关于Wordpress 更新 mysql 表的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 更新 mysql 表

Wordpress如何通过用户ID AND type_operation从MySQL表的列中回显SUM

如何在 WordPress 中创建联系表格?

WordPress网站的响应弹出窗口

WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入

WordPress,cron和time - 服务器上的时间会影响插件吗?怎么解决?