首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Drupal开发上下文中调试数据库查询

问在Drupal开发上下文中调试数据库查询
EN

Stack Overflow用户
提问于 2015-11-07 14:36:13
回答 1查看 229关注 0票数 0

我正在使用Drupal 7开发一个动态网页,我遇到了一个非常奇怪的问题。我将我的问题简化为一个非常小的测试案例,如下所示:

数据库端:我正在使用MySQL。我在这里定义了两个表,其中有几个示例数据条目:

代码语言:javascript
复制
CREATE TABLE people (
  pid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30) NOT NULL
);
INSERT INTO people VALUES (NULL, 'Joe');
INSERT INTO people VALUES (NULL, 'Ant');
INSERT INTO people VALUES (NULL, 'Tom');

CREATE TABLE event (
  eid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  pid INT(6) UNSIGNED NOT NULL,
  event_desc VARCHAR(20) NOT NULL,
  event_date DATE NOT NULL
);
INSERT INTO event VALUES (NULL, 1, '1p', '2015-10-01');
INSERT INTO event VALUES (NULL, 2, '1p', '2015-10-12');
INSERT INTO event VALUES (NULL, 2, '2p', '2015-10-00');
INSERT INTO event VALUES (NULL, 2, '3p', '2015-00-00');
INSERT INTO event VALUES (NULL, 3, '1p', '2010-07-18');
INSERT INTO event VALUES (NULL, 3, '2p', '2010-09-00');

注意,这里唯一有趣的特性是,事件表可能包含“2015-10-00”格式的不完整事件日期(日期未知时)和“2015-00-00”格式(日期和月份都未知)。我知道这在MySQL是合法的。

Drupal 7端:我创建一个定制模块,如下所示:

代码语言:javascript
复制
<?php
/**
 * Implements hook_menu().
 */
function test_menu() {
  $items['test'] = array(
    'type' => MENU_NORMAL_ITEM,
    'title' => 'Test',
    'description' => 'Test',
    'page callback' => '_test_page',
    'access callback' => TRUE,
    'menu_name' => 'main-menu',
  );
  return $items;
}

function _test_page() {
  $output = "";
  $sql = "SELECT event.event_desc, event.event_date, people.name FROM  event, ";
  $sql .= "people WHERE event.pid=people.pid ORDER BY people.name";
  $result = db_query($sql);
  foreach ($result as $data) {
    $output .= $data->name. " ". $data->event_desc. " ". $data->event_date. "<br>\n";
  }
  return $output;
}

注意,我创建了一个带有菜单项“Test”的页面。该页执行查询并显示结果。现在,非常奇怪的部分:当事件日期不完整时,查询得到错误的数据“0000-00-00”,如下面的屏幕截图所示:

​

一些分析:

  • 这似乎不是SQL的问题,因为当我从mysql命令行尝试相同的查询时,我可以得到正确的结果。
  • 只有当我加入这两个表时才会发生这种情况。如果我只是查询'event‘表,就可以在Drupal页面中获得正确的结果显示。
  • 当通过PDO将SQL从独立的PHP脚本传递到数据库时,没有问题。
  • 我从Drupal的论坛了解到Drupal核心中没有使用日期类型。因此,它可能得到充分的支持,也可能得不到支持。

因为调试不是直接要做的,所以我决定不再继续.避免错误的最简单方法是使用VARCHAR(10)存储日期信息。通过进行简单的更改,我的网页可以正常工作。当然,我将失去使用任何日期相关功能的能力。

EN

回答 1

Stack Overflow用户

发布于 2015-11-07 15:49:08

“2015-00-00”在mysql中是合法的。我想知道在PHP中是否合法。$ data ->event的数据类型是什么?只需确保将其打印为字符串,而不是格式化日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33583927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档