当我在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
答案 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插入语句之前。