drupal数据库查询的问题

时间:2010-09-16 20:52:29

标签: mysql drupal drupal-modules

我尝试使用此请求获取结果,该结果在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结果)

我的错误在哪里?

1 个答案:

答案 0 :(得分:4)

问题可能是由db_query()将日期时间格式化字符串的一部分视为查询参数引起的,它会尝试替换它。

因此,您需要在现有字符中添加额外的'%'字符以逃避它们,从而阻止参数替换过程尝试替换它们。

有关示例,请参阅db_query api文档中的"If a query that has % in them" comment

更清晰/更易读的解决方案可能是在查询中使用'%s'占位符作为格式化字符串,然后将实际格式化字符串作为参数添加到db_query调用中,如Eli建议的那样。