我正在与PDO一起加入:
SELECT users.*,images.*, sessions.*,social.*,videos.*,teams.*,achievements.*,_achievements_list.* FROM users LEFT JOIN images ON users.user_id=images.user_id LEFT JOIN sessions ON users.user_id=sessions.user_id LEFT JOIN social ON users.user_id=social.user_id LEFT JOIN videos ON users.user_id=videos.user_id LEFT JOIN teams ON users.user_id=teams.user_id LEFT JOIN achievements ON users.user_id=achievements.user_id LEFT JOIN _achievements_list ON achievements.achievement_id=_achievements_list.parent_id WHERE users.nickname = 'something'
问题是某些表的某些列具有相同的名称,因此在PDO返回的数组中,许多内容都会被覆盖。
我正在使用它:
$statement = $this->pdo->prepare($query);
if ($statement->execute($param))
return $statement->fetchAll(PDO::FETCH_ASSOC);
return false;
PDO返回一个关联数组,但是我该如何避免覆盖具有相同名称但来自不同表的列?
答案 0 :(得分:1)
您可以使用PDO::FETCH_NAMED
,请参见https://phpdelusions.net/pdo/fetch_modes#FETCH_NAMED
答案 1 :(得分:-2)
我们不建议使用。*因为:
如果表结构发生变化,那么你的列索引就会改变,如果你以前用索引读取,那就太糟糕了。
大多数情况下,你真的不需要所有的列,因此你会减少从服务器检索的数据量(如果它是远程的,那么它甚至可能是有意义的)
无论如何,如果你不使用。*,你可以在SQL查询中使用别名 喜欢
SELECT products.id prodId, orders.id orderId FROM Orders LEFT JOIN Products ON (prodId = orders.product_id) WHERE orderId = @oid