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

使用$wpdb->get_row与直接SQL查询结果不一致的原因

问题原因分析与解决办法

这问题的核心是你在$wpdb->prepare()里用错了占位符类型!

你看,你的查询里三个参数分别是'456'、'iso777'(明显是字符串)、'Firma789'(也是字符串),但你在SQL模板里全用了%d——这个占位符是用来格式化整数的。

当你把字符串传给%d时,WordPress会把这些字符串强制转换成整数:非数字开头的字符串会直接变成0,数字开头的会提取前面的数字(比如'456'会转为456,但'iso777'和'Firma789'都会变成0)。这时候实际执行的SQL就变成了:

SELECT info FROM wp_participants_database WHERE standard = 456 AND zertifikatsnummer = 0 AND _firmennamen = 0;

这和你手动执行的SQL完全不符,所以才会返回错误的结果"b"。

正确的写法

你需要根据字段类型匹配对应的占位符:

  • 字符串类型用%s
  • 整数类型用%d
  • 浮点类型用%f

从你手动执行的SQL能看出来,三个参数都是带单引号的字符串,说明这些字段都是字符串类型,把占位符全部改成%s就可以了:

$query = "SELECT info FROM wp_participants_database WHERE standard = %s AND zertifikatsnummer = %s AND _firmennamen = %s"; 
$firmennamenx = $wpdb->get_row($wpdb->prepare( $query, '456', 'iso777', 'Firma789' )); 
echo $firmennamenx->info;

这样$wpdb->prepare()会正确地对字符串参数进行转义并添加单引号,生成和你手动执行完全一致的SQL,自然就能得到预期的结果"d"了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:07