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

PHP中SQL多表查询部分字段返回NULL的问题求助

排查关联表查询字段返回NULL的问题

1. 核心关联条件错误

你的SQL中LEFT JOIN order_products op ON s.id = op.product_id这一行存在明显错误:orders表的主键id应该关联order_products表的order_id字段,而非product_id。这个错误直接导致order_products表无法与orders表正确匹配,进而让关联的products表数据也无法正常关联,最终出现op、p开头的字段全部返回NULL的情况。

2. 修正后的SQL语句

SELECT 
    s.user_id, s.order_date, s.total_order_price, s.status_id,
    op.id, op.product_id, op.amount, op.order_id, op.price,
    p.product_name, st.status_name 
FROM orders s
LEFT JOIN order_products op ON s.id = op.order_id
LEFT JOIN products p ON op.product_id = p.product_id
LEFT JOIN status st ON s.status_id = st.id 
WHERE user_id = ?

3. 修复PHP代码的SQL注入风险

你直接将$user_id拼接进SQL语句的做法存在严重SQL注入风险,同时建议使用fetchAll()获取所有匹配结果(fetch()仅返回第一行数据),修正后的PHP代码如下:

$query = $PDO->prepare("SELECT 
    s.user_id, s.order_date, s.total_order_price, s.status_id,
    op.id, op.product_id, op.amount, op.order_id, op.price,
    p.product_name, st.status_name 
FROM orders s
LEFT JOIN order_products op ON s.id = op.order_id
LEFT JOIN products p ON op.product_id = p.product_id
LEFT JOIN status st ON s.status_id = st.id 
WHERE user_id = ?");

$query->execute([$user_id]);
$rows = $query->fetchAll(PDO::FETCH_ASSOC);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:30:51