Результаты Weird MYSQL с использованием PDO :: FETCH_ASSOC без псевдонима столбца

У меня простой запрос на объединение влево.

SELECT e.employee_id as employee , e.badge_id as badge , e.first_nm as first , e.last_nm as last , e.work_phone as work_ph , e.mobile_phone as mobile_ph , e.manager_id as man_id , e.title_id as titl_id , e.username as user , e.start_dt as start , m.employee_id as memp_id , m.last_nm as m_last , m.first_nm as m_first , t.title_nm as titl_nm FROM employee e left join employee m on e.manager_id = m.employee_id left join title t on e.title_id = t.title_id WHERE e.employee_id = 1 

Если я использую псевдонимы столбцов, как я сделал выше, запрос работает нормально. Однако, если я не использую псевдонимы, некоторые значения не возвращаются. Например, следующее возвращает пробел, если я не даю столбцу псевдоним.

 e.first_nm as first //returns "Robert" e.first_nm //returns "" e.first_nm as first_nm //returns "" (alias matches column name) 

В этом же запросе,

 e.middle_nm //will return "P" 

независимо от того, имеет ли он псевдоним или нет. Я озадачен.

Я дал свои псевдонимы таблиц, и я использовал псевдоним таблицы в именах столбцов, поэтому не должно быть никаких неоднозначных имен столбцов.

Любые мысли были бы оценены. Благодаря,

обкрадывать

У вас есть два столбца с тем же именем, что и first_nm и, вероятно, PDO не знает, что возвращается в ваш код, а затем возвращает простое ». Хотя они находятся в разных таблицах, когда пришли к записи, у них одно и то же имя … вы видите проблему?

У вас есть два столбца с тем же именем, что и first_nm и mysql знает, как вернуть их все в порядке, а затем вернуть простой «first_nm» для обоих. И тогда PDO должны назначить их членам массива, делая имена полей в виде ключей массива. Существует только один способ:

 $row['first_nm'] = first col; $row['first_nm'] = second col; 

Если вы попытаетесь увидеть в строке $ row, сколько записей вы найдете?

Таким образом, вы либо должны использовать FETCH_ROW, либо дать своим полям разные имена. Это ни mysql, ни PDO не виноваты – это как раз то, как все работает.