PHP PDO запрос к MSAccess не работает правильно - PullRequest
0 голосов
/ 07 декабря 2011

Итак, я обращаюсь к базе данных MSAccess с использованием PDO (ODBC).Я пытаюсь получить все записи за текущую неделю, а не за последние семь дней.Вот мой запрос:

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

Очевидно, что это работает в MSAccess, но при использовании его из веб-приложения я получаю следующую ошибку:

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

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Для тех, кто хочет знать. Если вы выполняете запросы к базе данных MSAccess, синтаксис запроса не будет таким же, как у вас. Вот как я заставил это работать. Я изменил двойные кавычки вокруг ww на одинарные.

SELECT * 
FROM tblBilling 
WHERE ((Year(DateOfService) = Year(Date()) 
AND DatePart(\'ww\', DateOfService, 0) = DatePart(\'ww\', Date(), 0)))
ORDER BY DateOfService, TimeOfService
0 голосов
/ 07 декабря 2011

Похоже, что раздел Datepart вашего запроса не распознается как функция вашим соединением ADODB (он считает, что это параметр).

Это не поможет вам решить вашу конкретную проблему .... но есть альтернативный способ добраться туда, куда вы хотите.

В прошлом я решал проблемы такого рода путем создания календарной таблицы (для финансовых календарей, которые несколько логичны с логической точки зрения). Это идея, которую я получил от анализа данных с использованием SQL и Excel

Таблица выглядит примерно так.

Calendar table sample

Вы можете легко установить календарные дни на 50 лет, не вызывая проблем с исполнением. Затем вы можете получить нужные даты, присоединившись к таблице календаря.

...