【问题标题】:$wpdb>update having no effect on database?$wpdb>update 对数据库没有影响?
【发布时间】:2020-04-25 01:21:03
【问题描述】:

我正在尝试使用 $wpdb>update 函数更新数据库中特定 meta_id 的 meta_value,但它在执行时不会改变任何内容。

这里是代码。

<?php

// ID = 10074

global $wpdb;
$meta_value = 'NEW_VALUE';
$meta_key = 'wpcf-vehicle-status';
$meta_id = '10074';

$wpdb->update( 

 'wp25_postmeta', 
    array( 
     'meta_value' => $meta_value,
     'meta_key' => $meta_key
     ),
   array( 'ID' => $meta_id )

   );

   ?>

任何建议或帮助将不胜感激。

谢谢

【问题讨论】:

  • 您确定$wpdb 已定义吗?
  • @u_mulder 如果不是,方法调用应该触发错误

标签: php database wordpress


【解决方案1】:

这里有几个问题:

1) “wp_postmeta”表中没有字段“ID”。它应该是“meta_id”或“post_id”。
2) 表名应采用以下格式:

$wpdb->prefix."postmeta"

修复两个问题后的代码如下:

<?php

// ID = 10074

global $wpdb;
$meta_value = 'NEW_VALUE';
$meta_key = 'wpcf-vehicle-status';
$meta_id = '10074';

$wpdb->update( 

    $wpdb->prefix."postmeta", 
    array( 
        'meta_value' => $meta_value,
        'meta_key' => $meta_key
    ),
    array( 'meta_id' => $meta_id )

);

?>

【讨论】:

  • 如果您不知道 meta_id 但您知道 post_id 和 meta_key 值,您将如何更新它?数据库中的列是 meta_id = 10074 post_id = 852 meta_key = wpcf-vehicle-status meta_value = SOLD 我可以看到原始答案不是针对特定的 post_id 并更新数据库中的所有行,我假设需要 WHERE 子句?因此,如果 post_id = 852 且 meta_key = wpcf-vehicle-status 则仅更新该特定的 meta_id。
  • 上面的问题使用了像meta_id这样的var,这就是在更新的代码中显示meta_id的原因,这是可能的,但并不理想。我在答案中也提到他们可以使用理想的 post_id。
【解决方案2】:

我发现另一个名为“update_post_meta”的函数似乎可以正常工作。感谢您的输入。

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2022-01-04
    • 1970-01-01
    • 2020-12-10
    • 2019-12-30
    相关资源
    最近更新 更多