php - Wordpress wpdb->更新多个“WHERE”ID
问题描述
PHP菜鸟在这里:
我需要使用$wpdb->update
当前日期时间更新所有具有“NULL”值的数据库行。
这是我直接插入 PHPMyAdmin 时工作的 MySQL
UPDATE `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 是字符串,对象在 /Applications/MAMP/htdocs/myproject/wp-includes/wp-db.php 第 1158 行
[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 是字符串,对象在 /Applications/MAMP/htdocs/myproject/wp-includes/wp-db.php 第 1158 行
对不起,它很长,但我想清楚并展示我已经尝试过的内容,并清楚地了解我正在做的事情。
解决方案
你想要$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 子句,并且无法正确解析准备函数。
推荐阅读
- java - java - 如何将if条件限制为仅在java中执行一次sql查询
- mysql - MySql group by with 子句
- pointers - 初始化结构并在函数中分配它的参数
- vb.net - 在 vb.net 中运行时更改长度的数组
- python - 将 QSlider 与上面包含 QPixmap 的 QLabel 对齐
- typescript - 基于类的 vue 组件属性定义:构造函数 vs.getter/setter vs.mounted 生命周期
- excel - Excel VBA - 匹配范围内值的所有实例并返回相邻值
- c++ - gSOAP wsse 插件 - 签署请求的正确程序是什么?
- node.js - 我应该使用发送的令牌还是 user_id 来获取用户的数据
- excel-formula - Excel COUNTIFS 基于大于或等于过去日期