PDOStatement :: fetch()和重复的字段名称

Pee*_*rBr 3 php pdo

我正在使用MySQL和PHP 5.3.8开发Web应用程序.我们有一种机制可以将简化的查询指令转换为完整的查询字符串,包括连接.

由于我无法知道哪些(规范化的)表将被连接以及它们的字段被调用,因此可能存在重复的字段名称.执行时PDOStatement::fetch(PDO::FETCH_ASSOC),我得到一个相关的字段名称数组:

$test = $this->DBConnection->prepare("SELECT `events`.`Title`, `persons`.`Title` FROM `events` JOIN `persons` ON `events`.`HostID` = `persons`.`ID`;");
$test->execute();
$test->fetch();
Run Code Online (Sandbox Code Playgroud)

但我无法区分重复的字段名称,例如"标题".更糟糕的是,重复相互覆盖:

array('Title' => 'Frodo Baggins');
Run Code Online (Sandbox Code Playgroud)

在过去的糟糕时期,我跑到mysql_fetch_field()每个领域,为每个领域拿到桌子.请告诉我,有一种比添加字段(SELECT events.Title AS eventsTitle;)前缀更好的方法.

非常感谢您的帮助!

Bar*_*mar 5

在查询中为它们提供别名,这样它们就不会重复:

SELECT events.Title AS eTitle, persons.Title AS pTitle FROM ...
Run Code Online (Sandbox Code Playgroud)

然后行将是:

array('eTitle' => 'Hobbit Meeting', 'pTitle' => 'Frodo Baggins');
Run Code Online (Sandbox Code Playgroud)

另一种方法是将结果作为索引数组而不是关联数据获取:

$test->fetch(PDO::FETCH_NUM);
Run Code Online (Sandbox Code Playgroud)

然后你会得到:

array('Hobbit Meeting', 'Frodo Baggins');
Run Code Online (Sandbox Code Playgroud)

你可以$row[0]和它们一起访问它们$row[1].