这可能是一个愚蠢的问题,但我正在尝试使用$wpdb->update
而不是$ wpdb->查询但我不确定如何使用限制1.所以而不是
$wpdb->query("update {$wpdb->prefix}vp_pms_group_users set read = '1', seen = '1', time_seen = '{$date_time_seen}' where message_id = '{$last_message_id}' and group_id = '{$group_id}' and to_username = '{$session_uid}' and read = '0' limit 1");
我试过
$wpdb->update($wpdb->prefix . "vp_pms_group_users", array(
'read' => '1',
'seen' => '1',
'time_seen' => $date_time_seen,
),
array(
'message_id' => $last_message_id,
'group_id' => $group_id,
'to_username' => $session_uid,
'read' => '0',
),
LIMIT 1 //????
);
我应该在阵列之后还是在里面使用限制? 感谢。
答案 0 :(得分:1)
这是一个答案,它并不漂亮,但基于查看$wpdb
内的方法链,它可能是实现你的目标的唯一方法之后,仍然使用$wpdb->update()
。
第1步。
使用您稍后要替换的唯一参数进行更新,请注意,这必须是传递给WHERE
子句的最后一个参数,否则将其替换为LIMIT 1
将导致语法错误SQL语句。
类似的东西:
$wpdb->update(
$wpdb->prefix . "vp_pms_group_users",
array(...),
array(
...
'MyReplacementLimit' => 1
)
);
这应该给你一个像这样的SQL语句:
UPDATE vp_pms_group_users SET ... WHERE ... AND MyReplacementLimit = 1;
第2步:
现在,您可以使用query
过滤器将该伪条款替换为限制...
add_filter('query', function ($query) {
return str_replace('AND MyReplacementLimit = 1', 'LIMIT 1', $query);
});
这是未经测试,完全基于阅读$wpdb
中提供的代码。可能需要一些调整才能正常工作。
更简单的解决方案:
您可以直接使用SQL,只要您使用$wpdb->prepare()
它可能更容易阅读,并且比上述方法更容易理解。