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

