0

我正在像这样加入 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 返回一个关联数组,但我该怎么做才能避免覆盖具有相同名称但来自不同表的列?

4

2 回答 2

1

您可以使用PDO::FETCH_NAMED,请参阅https://phpdelusions.net/pdo/fetch_modes#FETCH_NAMED

于 2020-02-18T16:02:57.203 回答
-2
  • 非常不建议使用 .* 因为:

    1. 如果表结构发生变化,那么你的列索引会发生变化,如果你以前按索引读取,那就太糟糕了。

    2. 大多数情况下,您真的不需要所有列,因此您将减少从服务器检索的数据量(如果它是远程的,那么它甚至可能是有意义的)

无论如何,如果你不使用 .* 你可以在你的 SQL 查询中使用别名,比如

SELECT products.id prodId, orders.id orderId FROM Orders LEFT JOIN Products ON (prodId = orders.product_id) WHERE orderId = @oid
于 2013-07-22T15:28:03.680 回答