【问题标题】:Insert FB birthday into Mysql gives NULL将FB生日插入Mysql给出NULL
【发布时间】:2012-05-10 19:20:02
【问题描述】:

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

【问题讨论】:

  • CURDATE() 是一个 MySQL 函数,而不是 PHP,所以它应该包含在引号中。

标签: php mysql sql date


【解决方案1】:

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

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

【讨论】:

  • 我正在使用 PHP / MYSQL > 此语句显示语法错误。
  • +1 至少可以逃脱! @AdiMathur:STR_TO_DATE 是一个 MySQL 函数,而不是 PHP 函数。您需要了解 PHP 和 MySQL 之间的区别。 Jeroen 所写的内容或多或少取代了".$user['birthday'].'。也听从 Michael Mior 的建议。
【解决方案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');
}

【讨论】:

    【解决方案3】:

    (尽管是不同的语言和 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);
    }
    

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

    【讨论】:

    • @Bruno- 数据库中的生日是 0000-00-00
    • 按照@Jeroen 的建议使用STR_TO_DATE
    【解决方案4】:

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

    【讨论】:

    • 数据库中的生日是 0000-00-00,但现在时间很好..
    【解决方案5】:

    试试

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

    在 SQL 插入语句之前。

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多