插件中的$wpdb更新查询仅更新一列

时间:2017-01-30 作者:hal

我正在从woocommerce管理员处更新,编辑订单详细信息。我有两个问题:

仅更新“下载计数”列

$table = $wpdb->prefix . \'woocommerce_downloadable_product_permissions\';
$expiry_date = date("Y-m-d", strtotime("+ 30 days"));
$expiry_time = $expiry_date . \' 00:00:10\';

$wpdb->query("UPDATE `$table` SET 
    `downloads_remaining` = \'1\',
    `access_expires` = \'$expiry_time\',
    `download_count` = (`download_count` + 1)
    WHERE `order_id` = \'$post_id\'");
这里是“独立php版本,它可以:

$link = mysqli_connect($servername, $username, $password, $db);
$post_id = \'219\';

if (!$link) { exit; }

$expiry_date = date("Y-m-d", strtotime("+ 30 days"));
$expiry_time = $expiry_date . \' 00:00:00\';
$table = \'hkmw_woocommerce_downloadable_product_permissions\';
$query = "UPDATE `$table` SET 
    `downloads_remaining` = \'1\',
    `access_expires` = \'$expiry_time\',
    `download_count` = (`download_count` + 1)
    WHERE `order_id` = \'$post_id\';";

if (!mysqli_query($link,$query)) {
    printf("Errormessage: %s\\n", mysqli_error($link));
}
mysqli_close($link);

1 个回复
SO网友:hal

我不得不使用两个单独的查询。$wpdb->update语法无法处理基于现有值的计算。但对于其他两个领域,它是有效的。就像这样:

$table = $wpdb->prefix . \'woocommerce_downloadable_product_permissions\';

$expiry_date = date("Y-m-d", strtotime("+ 30 days"));
$expiry_time = $expiry_date . \' 00:00:00\';

$wpdb->query("UPDATE $table SET 
    download_count = (download_count + 1)
    WHERE order_id = \'$post_id\'");

$wpdb->update( $table, array( \'downloads_remaining\' => \'1\', \'access_expires\' => $expiry_time), array( \'order_id\' => $post_id ), array( \'%s\', \'%s\' ), array( \'%d\' ) );

相关推荐

WordPress中MySQL的CRUD前端

我希望我来对地方了。我想用MySQL数据库的前端丰富我的Wordpress站点,我将其托管在与我的WP站点相同的服务器上。实际上,我已经将(以前的)MS Access数据库迁移到MySQL,并且我确实使用wpdatables获得了对它的“表读/写”访问权限。我想,我要找的基本上是WP上MySQL的CRUD接口。我知道,我可以自己用很多php代码来构建它。但必须有一种方法,使用多种形式的引擎(重力、wp形式、强大……)并让好看的表单显示单个表记录,允许编辑它们,然后将它们写回MySQL数据库。。。这里有什么