【问题标题】:Problems with drupal Database Querydrupal 数据库查询的问题
【发布时间】:2010-09-16 20:52:29
【问题描述】:

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

我的错误在哪里?

【问题讨论】:

  • 尝试在查询工具(如 phpmyadmin)中检查此 sql。我假设您的查询一无所获。注意你的约会对话,sql 工具可以帮助你...
  • 我已经在第一行写了,它可以在 phpmyadmin 中工作。
  • db_query 返回一个结果资源,所以var_dump($result_med) 输出看起来没问题。您稍后会从该资源中获取实际内容,例如在示例的部分 while 循环中。为什么那里的var_dump($node) 被评论了,如果你取消评论它会显示什么?
  • 嗨 Henrik,它什么也没返回。
  • 是的:PHPmyAdmin 返回一个结果。

标签: mysql drupal drupal-modules


【解决方案1】:

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

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

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

一个更简洁/更易读的解决方案可能是只使用“%s”占位符作为查询中的格式化字符串,然后按照 Eli 的建议将实际的格式化字符串作为参数添加到 db_query 调用中。

【讨论】:

  • hmmm...我把它改成了这样:(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') &gt;= '2010-09-16T22:34:05')
  • 哎呀...忘记了一些procents...现在它可以工作了!很酷。非常感谢。
  • 很高兴能帮上忙。欢迎来到stackoverflow,顺便说一句。不过,您可能希望接受这个答案是正确的(将帮助其他人找到它 - 对我来说也有一些要点;)
  • 在查询中使用 %s 然后使用 db_query 插入正确的格式字符串可能会更干净。这样您就不必在源代码中修改它们。
猜你喜欢
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多