开发者

Flex DateField and MySQL default date value 0000-00-00

开发者 https://www.devze.com 2023-02-17 05:06 出处:网络
I created a service and callResponder (Via Generate Service Call and Generate Form in Flash Builder 4) that query a MySQL database for a name and a birth date.

I created a service and callResponder (Via Generate Service Call and Generate Form in Flash Builder 4) that query a MySQL database for a name and a birth date.

My problem is so simple I guess but I haven't been able to find the solution...

When I have an empty date in MySQL (0000-00-00), my binded DateField indicates 1899-11-30

I tried almost everything possible... A custom labelFunction, a custom function called straight after the call to my service to try to handle my data like this.. :

protected function parseDate(date:Date):void
{
    if (date.getFullYear() == -1) {
        friendbirthdate.selected开发者_StackOverflow中文版Date = null;
    }   else {
        var df:DateFormatter = new DateFormatter;
        df.formatString = 'YYYY-MM-DD';
        friendbirthdate.selectedDate = date;
    }
}

Unfortunately, this works only partially. When I try to update this same form in the database I get disconnected. I'm missing something here and would greatly appreciate a tip or two :-)

THANKS!


I recommend that you store NULL for unknown dates, as opposed to '0000-00-00'. NULL is a more accurate value in this case.

If you want to store it as NULL and display it as a different value you can do something like this:

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


Don't know if it will help somebody but I had trouble to insert values from a form, containing a DateField. That Form has been generated through the Flash Builder Generate Form tool.

The problem is that the service generated by Flash Builder expect a Date Object, no matter what... If you submit the form without selecting a date in the DateField, the service call crashes.

Let's have a look at a part of the generated sample service (Create and Update functions), we can see that PHP is expecting to transform a Date Object to a String like this :

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

First of all, be sure that your Date field in MySQL has as NULL default value.

Then alter the create and update functions like this :

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);

This way, the service call script won't try to do kinda null->toString('...')

0

精彩评论

暂无评论...
验证码 换一张
取 消