Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对MSAccess的PHP PDO查询无法正常工作_Php_Ms Access_Pdo_Odbc - Fatal编程技术网

对MSAccess的PHP PDO查询无法正常工作

对MSAccess的PHP PDO查询无法正常工作,php,ms-access,pdo,odbc,Php,Ms Access,Pdo,Odbc,因此,我使用PDO(ODBC)访问MSAccess数据库。我正在尝试获取本周的所有记录,而不是过去七天的记录。我的问题是: SELECT * FROM tblBilling WHERE (( Year(DateOfService) = Year(Date()) And DatePart("ww", DateOfService, 0) = DatePart("ww", Date(), 0) )) ORDER BY DateOfService, TimeOfService 显

因此,我使用PDO(ODBC)访问MSAccess数据库。我正在尝试获取本周的所有记录,而不是过去七天的记录。我的问题是:

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();
}

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

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

过去,我通过创建日历表(从逻辑角度来看,财务日历有点不太常见)来解决这种性质的问题。这是我从中得到的一个想法

这张桌子看起来像这样


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

任何想要了解的人。如果您对MSAccess数据库运行查询,那么查询语法将与您使用的语法不同。我就是这样让它工作的。我将ww周围的双引号改为单引号。

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

你能给我们看看你的密码吗?这是人们能够诊断您的问题的唯一方法。我认为您不需要在
WHERE
语句中添加这些括号。