我正在使用Drupal 7开发一个动态网页,我遇到了一个非常奇怪的问题。我将我的问题简化为一个非常小的测试案例,如下所示:
数据库端:我正在使用MySQL。我在这里定义了两个表,其中有几个示例数据条目:
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端:我创建一个定制模块,如下所示:
<?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”,如下面的屏幕截图所示:

一些分析:
因为调试不是直接要做的,所以我决定不再继续.避免错误的最简单方法是使用VARCHAR(10)存储日期信息。通过进行简单的更改,我的网页可以正常工作。当然,我将失去使用任何日期相关功能的能力。
发布于 2015-11-07 15:49:08
“2015-00-00”在mysql中是合法的。我想知道在PHP中是否合法。$ data ->event的数据类型是什么?只需确保将其打印为字符串,而不是格式化日期。
https://stackoverflow.com/questions/33583927
复制相似问题