将FB生日插入Mysql会给出NULL

时间:2012-05-10 19:20:02

标签: php mysql sql date

当我在MYSQL中插入生日和当前时间时,我得到NULL

$graph_url = "https://graph.facebook.com/me?access_token=".$params['access_token']."&format=json&fields=birthday";
$user = json_decode(file_get_contents($graph_url),true);
     echo("birthday is " . $user['birthday']);

SQL

$queryip = "insert into table (birthday,currenttime) values (".$user['birthday'].','.CURDATE().")";
                $resultip = mysql_query($queryip);

MYSQL结构 生日,当前时间字段都是类型DATE

5 个答案:

答案 0 :(得分:2)

您需要birthday_date列,而不是birthday,因为它始终采用相同的格式DDMMYYY。 之后,您需要将以下内容添加到INSERT查询中:

STR_TO_DATE('" . mysql_real_escape_string ($user ['birthday_date']) . "', '%m/%d/%Y')

答案 1 :(得分:2)

在PHP中:

function formatDateFbToSql($fbdate)
{
    // facebook user_birthday format (02/19/1988)
    $date = DateTime::createFromFormat('m/d/Y', $fbdate);
    // mysql format (1988-02-19)
    return $date->format('Y-m-d');
}

答案 2 :(得分:1)

(尽管是一种不同的语言和RDBMS,这与this question中的问题相同。)

首先,SQL字符串必须包含在''中:您在(".$user['birthday'].' ...中明显遗漏了它们。其次,更重要的是,他们必须被转义,以防止SQL注入攻击(并确保字符串无论如何都是有效的。)

通常,最好使用预准备语句将参数传递给SQL查询,而不是在查询本身中插入变量:这应该为您处理转义和转换。

如有必要,您还需要将生日字符串转换为日期。

我建议改用mysqli and prepared statements。 (有很多例子,或许this会有所帮助。)

修改

也许沿着这些方向尝试(假设你已经切换到mysqli):

$query = "insert into table (birthday,currenttime) values (STR_TO_DATE(?, '%m/%d/%Y'), CURDATE())";
if ($stmt = $mysqli->prepare()) {
    $stmt->bind_param('s', $user['birthday']);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

(这可能需要{JERen建议的birthday_date。)

答案 3 :(得分:0)

您是否尝试更换“。$ user ['birthday']。','。CURDATE()。”进入'“。$ user ['birthday']。”',CURDATE()?

答案 4 :(得分:0)

尝试

$user['birthday'] = date("Y-m-d", strtotime($user['birthday']));

在SQL插入语句之前。