Я пытаюсь получить результат с этим запросом, который работает в phpayadmin:
$result_med = db_query("SELECT node.nid AS nid,
node.created AS node_created
FROM dr_wiwe_node node
LEFT JOIN dr_wiwe_content_type_classified node_data_field_classified_valid_till ON node.vid = node_data_field_classified_valid_till.vid
WHERE ((node.type in ('classified')) AND (node.status <> 0))
AND (DATE_FORMAT(STR_TO_DATE(node_data_field_classified_valid_till.field_classified_valid_till_value, '%Y-%m-%dT%T'), '%Y-%m-%d\T%H:%i:%s') >= '2010-09-16T22:34:05')
ORDER BY node_created DESC LIMIT 1");
var_dump($result_med);
while ($node = db_fetch_object($result_med)) {
//var_dump ($node);}
В hardcoded php Version он ничего не возвращает. Если я var_dump $result_med, я получаю: ресурс (552) типа (результат mysql)
Где моя ошибка?
Вероятно, проблема связана с тем, что db_query()
обрабатывает части ваших строк форматирования даты и времени как параметры запроса, которые он пытается заменить.
Таким образом, вам нужно будет добавить дополнительные "%" символы к вашим существующим, чтобы избежать их, тем самым предотвращая попытку замены параметров.
См. "Если запрос, содержащий% в них" комментарий, из документации db_query api для примера.
Более чистым/более читаемым решением может быть просто использование заполнителей '% s' для строк форматирования в запросе, а затем добавление фактических строк форматирования в качестве аргументов для вызова db_query, как предложено Eli.
(DATE_FORMAT(STR_TO_DATE(node_data_field_classified_valid_till.field_classified_valid_till_value, '%%Y-%%m-%dT%%T'), '%%Y-%m-%d\T%%i:%%s') >= '2010-09-16T22:34:05')