You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询参数必须包含占位符,咨询这段WPDB查询的问题所在

问题分析与修正方案

你的这段SQL查询的核心问题是没有正确利用wpdb->prepare的占位符功能,反而直接将变量$post_id硬拼接进SQL语句中,完全失去了prepare方法提供的SQL注入防护作用,这也是WordPress官方明确不推荐的写法。

错误原因

wpdb->prepare的设计目的就是通过占位符来自动转义变量,避免恶意SQL注入。你当前的写法和直接拼接SQL字符串没有本质区别,相当于白调用了prepare方法。

正确写法

根据post_id是整数类型的特性,应该使用%d作为数字占位符,将变量作为参数传入prepare:

$sql = $wpdb->prepare(
    "SELECT * FROM `wp_postmeta` WHERE `meta_key`='_favorites' AND `post_id` = %d",
    $post_id
);

如果meta_key后续也需要动态传入,同样要用字符串占位符%s:

$sql = $wpdb->prepare(
    "SELECT * FROM `wp_postmeta` WHERE `meta_key`=%s AND `post_id` = %d",
    '_favorites',
    $post_id
);

内容的提问来源于stack exchange,提问作者Kreawich C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:05:18