Приветствую.
Есть проблема с обработкой запроса через db_query в модуле.
Думаю, я просто слабо знаю матчасть, т.е. опыта разработки модулей почти никакого, поэтому подскажите, пожалуйста.
Дано:
- Сайт на 6.22, БД под MySQL; В базе есть таблица с полями int(2){id}, int(3){data}, , int(11){timestamp}. В таблицу накапливаются некие статистические данные по контрольным точкам, соответственно - id точки, значение, и timestamp. Запись последнего происходит через преобразование вида strtotime($date), где $date = "23-01-2011"(в таком формате вводится при добавлении).
- Одна из функций модуля обрабатывает форму, в которую вводится дата в таком же формате, напр. "30-07-2011", результат сохраняется в некой переменной $from = strtotime(введенная_в_форму_дата);
Должен выполниться запрос, который выдаст последовательность значений от введенной даты до последней из имеющихся.
Проблема:
Ни один из этих трех вариантов запросов не работает(переменные содержат значения - проверено):
$result = db_query("SELECT * FROM {stat_data} WHERE {timestamp}>'%s' AND {id} = %d ORDER BY {timestamp} ASC", $from, $id)
или
$result = db_query("SELECT * FROM {stat_data} WHERE {timestamp}>%d AND {id} = %d ORDER BY {timestamp} ASC", $from, $id)
и даже запрос в нарушение правил:
$result = db_query("SELECT * FROM {stat_data} WHERE {timestamp}>'$from' AND {id} = $id ORDER BY {timestamp} ASC")
тоже не работает - отдаются либо все значения с начала, либо выдается ошибка, в которой видно, что запрос идет как ...WHERE {timestamp}> AND...
Если я пишу явно {timestamp}>'1302037200', то отрабатывается как надо.
Помогите понять, что я делаю не так? Есть возможность менять все что угодно, включая начинку базы.
Комментарии
скобками обрамляются только названия таблиц, а не полей
Заработался:) Убрал, но все равно эффект тот же самый.
код?
Сообразно описанным выше вариантам:
$result = db_query("SELECT * FROM {stat_data} WHERE timestamp>'%s' AND id = %d ORDER BY timestamp ASC", $from, $id)
...
$result = db_query("SELECT * FROM {stat_data} WHERE timestamp>%d AND id = %d ORDER BY timestamp ASC", $from, $id)
...
$result = db_query("SELECT * FROM {stat_data} WHERE timestamp>'$from' AND id = $id ORDER BY timestamp ASC")
значения аргументов какие?
Например:
$id = 2; $from = 1302037200;
Т.е. id - всегда 1- или 2-значное число, from - результат strtotime()
запросы в phpmyadmin выполнять пробовали?
Сделал:
FROM `stat_data`
WHERE `id` = 2
AND `timestamp` > 1306875600
ORDER BY `timestamp` ASC
LIMIT 0 , 30
Вывело записи где timestamp > 1306875600 и `id` = 2. Все как надо. О чем я и писал в самом начале - если указать значение даты в запросе, например:
$result = db_query("SELECT * FROM {stat_data} WHERE timestamp>'1306875600' AND id = %d ORDER BY timestamp ASC", $id)
то все работает. Не понимаю, что же не так..
а если так какую ошибку выведет?
penexe,
вот что имеем:
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1SELECT * FROM stat_data WHERE timestamp > 1306875600 AND id = 2 ORDER BY timestamp ASC' at line 1 query: 1SELECT * FROM stat_data WHERE timestamp > 1306875600 AND id = 2 ORDER BY cpday ASC in (...)
Если убрать 1 перед SELECT, выдает все значения таблицы.