@Artem0071
Безработный mr. Junior

Как вывести одинаковые столбцы в PDO?

Есть скрипт:
public function query($q, $params = [])
    {
        $statement = $this->pdo->prepare($q);
        $statement -> execute($params);
        return json_decode(json_encode($statement->fetchAll(PDO::FETCH_CLASS)),true);
    }


Это работает отлично
НО:
если я делаю join'ы и в двух таблицах есть одинаковые название столбцов, то он сливает их в одно

Например:

есть таблица users(user_id, name, access_token, t_id)
и еще таблица temp(t_id, title, access_token)

Если сделать выборку с использование джоинов то будет следующий массив:
[0]=>
  array(19) {
['user_id'] => ... ,
['name'] => ... ,
['access_token'] => ... , // только от таблицы users
['t_id'] => ... ,
['title'] => ... 
 }


Я понимаю что в PHP не должно быть в массиве повторяющихся ключей

Как быть в такой ситуации?
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Помимо стандартных способов (задать всем колонкам алиасы или использовать fetch_num), в ПДО есть забавный режим, PDO::FETCH_NAMED, который все поля с одинаковыми названиями запихивает во вложенный массив.

Не знаю, насколько это удобно, но буквально на вопрос отвечает :D

И да, вот этот вот ужас с джейсон енкоде ой нет декоде надо стереть, пока никто не видел.

Плюс вообще убрать фетч из функции, а вместо этого возвращать стейтмент:
public function query($q, $params = [])
{
        $statement = $this->pdo->prepare($q);
        $statement -> execute($params);
        return $statement;
}

И тогда ты сможешь использовать показанный выше режим
// обычные данные
$data = $db->query($sql, $params)->fetchAll();
// данные с дублями
$data = $db->query($sql, $params)->fetchAll(PDO::FETCH_NAMED);

А так же все 100500 остальных режимов, поддерживаемых ПДО
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
SimBioT19
@SimBioT19
{{ user.about }}
Что это такое?
return json_decode(json_encode($statement->fetchAll(PDO::FETCH_CLASS)),true);


PDO::FETCH_ASSOC знаете?
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
select a.access_token as a_access_token, b.access_token as b_access_token
from `table1` as a
left join  `table2` as b
ON a.column_name = b.column_name;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы