Wpdb->准备和MySQL更新-是如何完成的?

时间:2011-10-19 作者:dkmojo

正在尝试在插件查询中设置“已删除”日期时间,但我不确定如何将更新集与$wpdb一起使用->;准备

我的问题是:

$cur_date = date(\'Y-m-d G:i:s\');        
$rows_affected = $wpdb->query(
    $wpdb->prepare("
        UPDATE $table
        SET ( removed, post_id, user_id, status )
        VALUES ( %s, %d, %d, %d )
    "),
    array($cur_date, $postid, $userid, 0)
));
我可以使用$wpdb设置这样的更新吗?对于自行构建的DB查询来说是非常新的。

如果没有,我应该/可以如何做到这一点?

Thanx提前!

编辑---------------------------------------------------

新代码:

$table = $wpdb->prefix . \'ds_entry_swoons\';
$cur_date = date(\'Y-m-d G:i:s\'); 
$rows_affected = $wpdb->query(
    $wpdb->prepare("
        UPDATE {$table}
        SET  removed = %s, post_id = %d, user_id = %d, swoon_status = %d
        WHERE post_id = $postid AND user_id = $userid;",
        $cur_date, $postid, $userid, 0
    )
);

3 个回复
最合适的回答,由SO网友:EarnestoDev 整理而成

我有点修正了你的问题。它需要一个表和一个WHERE条件来防止更改所有行。即使最后限制1也不会有什么坏处。

$rows_affected = $wpdb->query(
    $wpdb->prepare(
        "UPDATE {$table} SET removed = %s, post_id = %d, user_id = %d, status = %d;",
        $cur_date = date(\'Y-m-d H:i:s\'), $postid, $userid, 0
    ) // $wpdb->prepare
); // $wpdb->query
只需添加WHERE。。。在MySQL查询中。正确使用prepare:

$wpdb->prepare($format, $arg1, $arg2, ...); // just like printf()

SO网友:Rarst

有专门的$wpdb->update() 方法,该方法既方便又便于执行UPDATE 查询并执行清理,调用$wpdb->prepare() 内部。

SO网友:T.Todua

您可以插入任意数量的变量(%digit,%s字符串…)

global $wpdb;
$zz = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->postmeta 
    SET meta_value = \'%s\'       WHERE post_id = \'%d\'    OR WHERE post_id = \'%d\' ", 
                      $value,                    $id_1,                     $id_2   ) );
var_dump($zz); exit;

结束