奇怪的MYSQL结果使用PDO :: FETCH_ASSOC而没有列别名

时间:2014-04-04 03:40:48

标签: php mysql sql pdo alias

我有一个简单的左连接查询。

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" 

无论是否有别名。我感到困惑。

我已经给了表格别名,我在列名中使用了表别名,所以不应该有任何不明确的列名。

任何想法都将不胜感激。 谢谢,

罗布

2 个答案:

答案 0 :(得分:0)

你有两列同名first_nm,可能PDO不知道返回你的代码然后返回简单的“”。虽然他们在记录中有不同的表,但他们有相同的名字......你看到了问题吗?

答案 1 :(得分:0)

你有两列同名first_nm,mysql知道如何将它们全部返回,然后为两者返回简单的“first_nm”。然后PDO必须将它们分配给数组成员,将字段名称作为数组键。只有一种方式,比如这个

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

如果您尝试查看$ row,您会找到多少条目?

因此,您必须使用FETCH_ROW或为您的字段指定不同的名称。它既不是mysql也不是PDO - 它只是事情的运作方式。