带有 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 - 错误/分组查询结果的主要内容,如果未能解决你的问题,请参考以下文章