PDO加入,避免在结果数组中覆盖具有相同名称的键

时间:2013-07-22 15:08:43

标签: arrays pdo

我正在与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返回一个关联数组,但是我该如何避免覆盖具有相同名称但来自不同表的列?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-2)

  • 我们不建议使用。*因为:

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

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

无论如何,如果你不使用。*,你可以在SQL查询中使用别名 喜欢

SELECT products.id prodId, orders.id orderId FROM Orders LEFT JOIN Products ON (prodId = orders.product_id) WHERE orderId = @oid