PDO在提取时会自动走样?

问题描述

幕后似乎没有办法做到这一点。显式别名是唯一的方法

解决方法

我有以下两个表:

foo:

ID     NUMBER(38)
DATA   VARCHAR2(10)

酒吧:

ID     NUMBER(38)
FOO_ID NUMBER(38)
DATA   VARCHAR2(10)

当使用PDO发出以下查询:

SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)

有没有办法以某种自动别名格式(例如“ FOO.ID”,“ FOO.DATA”,“ BAR.ID”等)从联接中取回 所有
列,所以我不是否需要为查询中的每一列指定和别名?

我已经阅读了有关各种访模式的所有文档,并尝试了大多数标志/选项,但似乎仍然找不到我想要的东西。

更新:

使用PDO::FETCH_ASSOC,来自的列foo似乎被来自的列覆盖bar

array(3) {
  ["ID"]=>
  string(1) "1"
  ["DATA"]=>
  string(5) "bar 1"
  ["FOO_ID"]=>
  string(1) "1"
}

使用PDO::FETCH_NUM来自两个,列foobar出现,为了,但没有任何的方式来识别哪些列来自哪个表,通过了解在每个表和这些列的确切顺序列数除外(容易出错):

array(5) {
  [0]=>
  string(1) "1"
  [1]=>
  string(5) "foo 1"
  [2]=>
  string(1) "1"
  [3]=>
  string(1) "1"
  [4]=>
  string(5) "bar 1"
}

使用PDO::FETCH_BOTH,我们似乎遇到了PDO::FETCH_ASSOCPDO::FETCH_NUM合并时遇到的相同问题,并创建了一个非常难以理解的结果集:

array(8) {
  ["ID"]=>
  string(1) "1"
  [0]=>
  string(1) "1"
  ["DATA"]=>
  string(5) "bar 1"
  [1]=>
  string(5) "foo 1"
  [2]=>
  string(1) "1"
  ["FOO_ID"]=>
  string(1) "1"
  [3]=>
  string(1) "1"
  [4]=>
  string(5) "bar 1"
}

理想情况下,结果集应类似于以下内容:

array(5) {
  ["FOO.ID"]=>
  string(1) "1"
  ["FOO.DATA"]=>
  string(5) "foo 1"
  ["BAR.ID"]=>
  string(1) "1"
  ["BAR.FOO_ID"]=>
  string(1) "1"
  ["BAR.DATA"]=>
  string(5) "bar 1"
}