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

PDO实现多用户共享同一条Rentals表记录的问题排查

问题解决方案

你的问题出在使用了SELECT *进行联表查询——当两张表存在同名字段时,后查询的表字段会覆盖前面的。你拿到的id应该来自rental_group表,而非rentals表,导致数据不符。

解决思路

要只获取rentals表的完整数据,同时确保关联逻辑正确,你可以:

  • 明确指定查询rentals表的所有字段,而非查询两张表的全部字段
  • 保留联表条件来匹配当前用户对应的rental_id

修改后的代码

public function getSomething() {
    // 只查询rentals表的所有字段,避免字段冲突
    $stmt = $this->connect()->prepare("SELECT rentals.* FROM rentals JOIN rental_group ON rentals.id = rental_group.rental_id WHERE rental_group.worker = ?");
    $id = $_SESSION['userid'];
    $stmt->execute([$id]);
    
    $returnResults = [];
    // 直接用fetchAll简化循环逻辑
    if ($rows = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
        $returnResults = $rows;
    }
    return $returnResults;
}

额外说明

如果后续需要同时获取rental_group表的字段,务必给重复名字段加别名,比如:

SELECT rentals.id AS rental_id, rentals.*, rental_group.user_id AS group_user_id FROM rentals JOIN rental_group ON rentals.id = rental_group.rental_id WHERE rental_group.worker = ?

这样通过$row['rental_id']就能准确拿到rentals表的ID,不会和其他表的同名字段混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:55:20