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

列は常に同じ形式であるため、DDMMYYYbirthday_dateではなく、列を要求する必要があります。birthdayその後、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'] = date("Y-m-d", strtotime($user['birthday']));

SQL 挿入ステートメントの前。

于 2014-01-03T19:29:48.367 に答える
0

「.$user['birthday'].','.CURDATE()」を置き換えてみましたか?'".$user['birthday']."',CURDATE() ?

于 2012-05-10T19:26:06.037 に答える