我尝试使用此请求获取结果,该结果在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);}
在硬编码的PHP版本中,它什么都不返回。如果我var_dump $ result_med,我得到: 类型的资源(552)(mysql结果)
我的错误在哪里?
答案 0 :(得分:4)
问题可能是由db_query()
将日期时间格式化字符串的一部分视为查询参数引起的,它会尝试替换它。
因此,您需要在现有字符中添加额外的'%'字符以逃避它们,从而阻止参数替换过程尝试替换它们。
有关示例,请参阅db_query api文档中的"If a query that has % in them" comment。
更清晰/更易读的解决方案可能是在查询中使用'%s'占位符作为格式化字符串,然后将实际格式化字符串作为参数添加到db_query调用中,如Eli建议的那样。