【问题标题】:PHP PDO query to MSAccess is not working correctly对 MSAccess 的 PHP PDO 查询无法正常工作
【发布时间】:2012-01-14 15:05:06
【问题描述】:

所以我正在使用 PDO (ODBC) 访问 MSAccess 数据库。我正在尝试获取本周而不是过去 7 天的所有记录。这是我的查询:

SELECT * 
FROM tblBilling 
WHERE ((
      Year(DateOfService) = Year(Date()) 
  And DatePart("ww", DateOfService, 0) = DatePart("ww", Date(), 0)
))
ORDER BY DateOfService, TimeOfService

显然这在 MSAccess 中有效,但是当从 Web 应用程序中使用它时,我收到以下错误:

SQLSTATE[07002]: COUNT field incorrect: 
    -3010 [Microsoft][ODBC Microsoft Access Driver] 
    Too few parameters. Expected 1. 
    (SQLExecute[-3010] at ext\pdo_odbc\odbc_stmt.c:254)

我似乎无法弄清楚这一点。我一定是忽略了什么,我的大脑现在变成了糊状。我知道如果我删除DataPart,它将运行查询并且不返回错误,但是它不会做我需要它做的事情。

感谢大家的帮助!

根据要求提供额外代码:

try
{
    $pdo = new PDO('odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq='.DB_NAME.';Uid=');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $myPDO = $pdo->prepare($query);
    $myPDO->execute(); 

    $result = $myPDO->fetchAll();
} catch(PDOException $e)
{
    echo $e->getMessage();
}

【问题讨论】:

  • 你能告诉我们你的代码吗?这是人们能够诊断您的问题的唯一方法。
  • 我认为您不需要在 WHERE 语句周围加上括号。

标签: php ms-access pdo odbc


【解决方案1】:

您的查询的 Datepart 部分似乎没有被您的 ADODB 连接识别为函数(它认为它是一个参数)。

这并不能帮助您解决确切的问题....但这里有另一种方法可以到达您想去的地方。

我过去曾通过创建日历表(从逻辑角度来看有些随意的财务日历)解决了这种性质的问题。这是我从Data Analysis Using SQL and Excel 得到的一个想法

表格看起来像这样。

您可以轻松放置 50 年的日历日,而不会导致任何类型的性能问题。然后,您可以根据需要通过加入日历表来获取您的日期桶。

【讨论】:

    【解决方案2】:

    对于任何想知道的人。如果您正在对 MSAccess 数据库运行查询,则查询语法将与您所使用的不同。这就是我让它工作的方式。我将 ww 周围的双引号更改为单引号。

    SELECT * 
    FROM tblBilling 
    WHERE ((Year(DateOfService) = Year(Date()) 
    AND DatePart(\'ww\', DateOfService, 0) = DatePart(\'ww\', Date(), 0)))
    ORDER BY DateOfService, TimeOfService
    

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多