带有 PHP 的 MDB/ODBC - 错误/分组查询结果

Posted

技术标签:

【中文标题】带有 PHP 的 MDB/ODBC - 错误/分组查询结果【英文标题】:MDB/ODBC with PHP - wrong/grouped query result 【发布时间】:2016-09-21 08:32:24 【问题描述】:

我在 php 上的 odbc 连接有问题。有一个名为 statistics.mdb 的数据库,其中存储了一些信息。在这个数据库中有两个表: - 营业额网店 - 商店

表“Shops”比“Turnover EShop”小得多。以下连接/查询对“商店”表没有任何问题。但是当我尝试将它与“Turnover EShop”一起使用时,它会显示一个问题。

$pdo = new PDO("odbc:Driver=Microsoft Access Driver (*.mdb, *.accdb);Dbq=O:\\Statistics\\statistics.mdb;Uid=Admin");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql  = "SELECT * FROM Turnover EShop WHERE ProductGroup = 'A22'"; 
$exec = $pdo->query($sql);

foreach ($exec as $row)  echo $row[1]."<br>"; //index Problem mentioned below: 1 = 'ProductName' 

有结果,即使是正确的。但是表格“营业额 EShop”看起来像这样(简化为 3 行):

OrderID: 1
ProductName: Super Product 77
ProductNo: 123-456
ProductGroup: A22

OrderID: 2
ProductName: Super Product 77
ProductNo: 123-456
ProductGroup: A22

OrderID: 3
ProductName: Product 12
ProductNo: 888-999
ProductGroup: B52

最后,结果是:Super Product 77(只有一次……)但应该有两次……

另一个有趣的事情是,通过使用$row['ProductName'],它只适用于“Shops”表。在更大的表“Turnover EShop”中,由于未定义的索引导致错误...所以我不得不使用与列数不匹配的数字。

foreach ($exec as $row)  echo $row[1]."<br>"; 

提前感谢您的支持,祝您有美好的一天

【问题讨论】:

【参考方案1】:

我明白了!

这个问题解决起来很简单……耻辱

还有一个叫做“营业额”的表格。所以,“SELECT * FROM Turnover ... EShop”从表“Turnover”而不是“Turnover EShop”中取出数据......所以我不得不在表名周围使用[]。

$sql  = "SELECT * FROM [Turnover EShop] WHERE ProductGroup = 'A22'"; 

所以我现在可以有效率了 ;-) THX

【讨论】:

当然,在 MS Access 字段和表名中带有空格或特殊字符或保留字的应该用方括号括起来。此外,PHP 数组是从零开始的,因此第一列 OrderID 将是 $row[0],第二列 ProductName 将是 $row[1]

以上是关于带有 PHP 的 MDB/ODBC - 错误/分组查询结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 访问 MDB

找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动(转)

MYSQL按日,周和月分组,带有php时间戳[重复]

Windows 7 ODBC 驱动程序 [重复]

PHP,MySQL 选择,按字段排序并分组

带有可编辑行的分组 uitableview - Apple 示例让我崩溃