1

当我在 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

4

5 回答 5

2

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

STR_TO_DATE('" . mysql_real_escape_string ($user ['birthday_date']) . "', '%m/%d/%Y')
于 2012-05-10T19:26:49.323 回答
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');
}
于 2012-08-16T19:43:28.323 回答
1

(尽管是不同的语言和 RDBMS,但这与此问题中的问题相同。)

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

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

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

我建议改为使用mysqli和准备好的语句。(有很多例子,也许会有所帮助。)

编辑:

或许可以尝试以下方式(假设您已切换到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);
}

(这可能也需要birthday_date像 Jeroen 建议的那样。)

于 2012-05-10T19:26:18.127 回答
0

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

于 2012-05-10T19:26:06.037 回答
0

尝试

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

在 SQL 插入语句之前。

于 2014-01-03T19:29:48.367 回答