Flex DateField和MySQL默认日期值0000-00-00

时间:2011-03-15 20:44:43

标签: mysql flex null datefield

我创建了一个服务和callResponder(通过生成服务调用并在Flash Builder 4中生成表单),用于查询MySQL数据库中的名称和出生日期。

我的问题很简单,我想但是我找不到解决方案......

当我在MySQL(0000-00-00)中有一个空日期时,我的绑定日期字段表示1899-11-30

我几乎尝试了所有可能的...一个自定义labelFunction,一个自定义函数,在调用我的服务后直接调用,试图像这样处理我的数据..:

protected function parseDate(date:Date):void
{
    if (date.getFullYear() == -1) {
        friendbirthdate.selectedDate = null;
    }   else {
        var df:DateFormatter = new DateFormatter;
        df.formatString = 'YYYY-MM-DD';
        friendbirthdate.selectedDate = date;
    }
}

不幸的是,这只能部分起作用。当我尝试在数据库中更新同一个表单时,我断开连接。我在这里遗漏了一些东西,非常感谢一两个小贴士: - )

谢谢!

2 个答案:

答案 0 :(得分:0)

我建议你为未知日期存储NULL,而不是'0000-00-00'。在这种情况下,NULL是更准确的值。

如果要将其存储为NULL并将其显示为不同的值,则可以执行以下操作:

SELECT COALESCE(date_column,'0000-00-00') as formatted_date
FROM your_table

答案 1 :(得分:0)

不知道它是否会对某人有所帮助,但我无法从包含DateField的表单中插入值。该表单已通过Flash Builder 生成表单工具生成。

问题是Flash Builder生成的服务需要一个Date对象,无论如何......如果您在DateField中没有选择日期的情况下提交表单,服务调用就会崩溃。

让我们看一下生成的示例服务(Create和Update函数)的一部分,我们可以看到PHP期望将Date对象转换为String,如下所示:

mysqli_stmt_bind_param($stmt, 'sss', $item->friendname, $item->friendlastname,  $item->friendbirth->toString('YYYY-MM-dd HH:mm:ss'));

首先,请确保MySQL中的Date字段具有NULL默认值。

然后改变创建和更新功能,如下所示:

if ($item->friendbirth == null)
    $friendbirth = null;
else
    $friendbirth = $item->friendbirth->toString('yyyy-MM-dd HH:mm:ss');

mysqli_stmt_bind_param($stmt, 'sss', $item->friendname, $item->friendnickname, $friendbirth);

这样,服务调用脚本不会尝试做某种 null-> toString('...')

相关问题