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

PHP使用mysqli查询wp_postmeta表_hover与_sku元值的问题排查

代码错误说明
  • 两次对$sql变量重复赋值,第一条查询_hover数据的语句被第二条完全覆盖,实际执行的只有第二条存在语法错误的SQL
  • 第二条SQL写法不符合语法规则:SELECT meta_value = '_sku' 是错误的字段声明语法,且WHERE post_id = post_id为恒成立条件,会返回全表无意义的布尔判断结果,完全没有做同post_id的关联匹配
  • 循环输出时读取的数组键$row["meta_value ='_sku'"]不存在,和查询实际返回的字段名不匹配,自然拿不到sku的值
修正后代码

通过表自关联一次查询出所有目标数据,避免循环嵌套查库带来的性能损耗:

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
  die("数据库连接失败: " . $conn->connect_error);
}

// 同表自连接,匹配同一post_id下的_hover、_sku对应值
$sql = "SELECT 
    a.post_id,
    a.meta_value AS hover_val,
    b.meta_value AS sku_val
FROM wp_postmeta a
INNER JOIN wp_postmeta b 
ON a.post_id = b.post_id
WHERE a.meta_key = '_hover' 
AND b.meta_key = '_sku'";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["post_id"]. " - _hover值: " . $row["hover_val"]. " - _sku值: ".$row["sku_val"]."<br>";
  }
} else {
  echo "0 results";
}
$conn->close();

补充说明:如果有部分post_id仅存在_hover字段、不存在对应_sku字段,将SQL中的INNER JOIN替换为LEFT JOIN即可保留这部分数据,此时无对应sku的记录sku_val字段会返回null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:06:48