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
相关产品推荐
相关产品推荐

