为了账号安全,请及时绑定邮箱和手机立即绑定

WordPress wpdb->更新多个“WHERE”ID

WordPress wpdb->更新多个“WHERE”ID

PHP
慕哥6287543 2023-09-08 10:50:22
PHP菜鸟在这里:我需要用$wpdb->update当前日期时间更新所有具有“NULL”值的数据库行。这是当我直接插入 PHPMyAdmin 时可以使用的 MySQLUPDATE `mytable`SET `expired` = CURRENT_TIMESTAMP()WHERE (`id` > 1 AND `expired` IS NULL)使用$wpdb我发现我需要获取所有需要过期的 ID,如下所示:$get_ids = $wpdb->get_results("    SELECT id    FROM $database    WHERE (`id` > 1 AND `expired` IS NULL)");所以现在我有一个 ID 数组,我的想法是将它们放在像$wpdb->update这样的位置foreach($get_ids as $key => $value){    $data = array('expired' => $currentTime);    $where = array('id' => $value);    $wpdb->update(        $database,        $data,        $where,    );    print_r( $where );}print_r 返回 "Array(    [id] => stdClass Object        (            [id] => 34        ))Array(    [id] => stdClass Object        (            [id] => 38        ))但阅读文档我相信它需要更像这样array('id' => $value)另外,这是我的错误日志中的PHP错误[30-Jul-2020 03:42:50 UTC] PHP 注意:wpdb::prepare 被 错误地调用。不支持的值类型(对象)。请参阅WordPress 中的调试以获取更多信息。(此消息是在版本 4.8.2 中添加的。)位于 /Applications/MAMP/htdocs/myproject/wp-includes/functions.php 第 5167 行[2020 年 7 月 30 日 03:42:50 UTC] PHP 警告:mysqli_real_escape_string() 期望参数 2 为字符串,即第 1158 行 /Applications/MAMP/htdocs/myproject/wp-includes/wp-db.php 中给出的对象[30-Jul-2020 03:42:50 UTC] PHP 注意:wpdb::prepare 被 错误地调用。不支持的值类型(对象)。请参阅WordPress 中的调试以获取更多信息。(此消息是在版本 4.8.2 中添加的。)位于 /Applications/MAMP/htdocs/myproject/wp-includes/functions.php 第 5167 行[2020 年 7 月 30 日 03:42:50 UTC] PHP 警告:mysqli_real_escape_string() 期望参数 2 为字符串,即第 1158 行 /Applications/MAMP/htdocs/myproject/wp-includes/wp-db.php 中给出的对象抱歉,它很长,但我想清楚地展示我已经尝试过的内容,并清楚地了解我正在做的事情。
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

你想要$wpdb->get_col()而不是$wpdb->get_results(). 同样的事情,但get_col返回一个简单的值数组(因为我们知道您只返回一列),而get_results返回和对象数组,因为您可能会获得多列。


或者你可以这样做:


$where = array('id' => $value->id);

// - or -

$where = (array) $value;

但在这种情况下使用:


$get_ids = $wpdb->get_col("

    SELECT id

    FROM $database

    WHERE (`id` > 1 AND `expired` IS NULL)

");

是正确的做法。


请参阅: https: //codex.wordpress.org/Class_Reference/wpdb


我相信您的 mysql 准备错误是由于您将错误的值传递给 where 子句并且无法为准备函数正确解析它。


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信