4

2012 年 8 月 12 日のような形式の日付を挿入しようとしていますが、挿入後にデータベース セットを確認すると、日付フィールドに00-00-0000しか表示されませんか?

私が使用するクエリは次のとおりです。

$query= "INSERT INTO ambition_opportunities SET

 opp_deadline='".strtotime($_POST['deadline'])."'"; // date field come with date picker** 

 $sql = mysql_query($query) or die(mysql_error());

ありがとう

4

4 に答える 4

6

日付と時刻のリテラルで述べたように:

MySQL はDATE、次の形式の値を認識します。

  • 'YYYY-MM-DD'または'YY-MM-DD'形式の文字列として。「リラックスした」構文が許可されています。日付部分間の区切り文字として任意の句読点を使用できます。たとえば、'2012-12-31''2012/12/31''2012^12^31'、および'2012@12@31'は同等です。

  • 'YYYYMMDD'文字列が日付として意味をなす場合、どちらの'YYMMDD'形式にも区切り文字がない文字列として。たとえば、'20070523''070523'は と解釈されます'2007-05-23'が、'071332'不正であり (無意味な月と日の部分があります)、 になり'0000-00-00'ます。

  • 数値が日付として意味がある場合は、YYYYMMDDまたはYYMMDD形式の数値として。たとえば、19830905830905は として解釈され'1983-09-05'ます。

したがって、文字列'12-Aug-2012'は有効な MySQL 日付リテラルではありません。3 つのオプションがあります (好みのあいまいな順序で、要件の詳細情報はありません)。

  1. dateFormatオプションを使用して、サポートされている形式で日付を提供するように Datepicker を構成します。

    $( ".selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
    
  2. MySQL のSTR_TO_DATE()関数を使用して文字列を変換します。

    opp_deadline=STR_TO_DATE('$_POST[deadline]', '%d-%b-%Y')
    

    注意: SQL インジェクションに関する以下の警告を参照してください。

  3. 受け取った文字列を PHP のタイムスタンプに変換します。たとえば、strtotime()現在のように使用します。

    $timestamp = strtotime($_POST['deadline']);
    

    そして、次のいずれか:

    • を使用してタイムスタンプをフォーマットしますdate()

      $date = date('Y-m-d', $timestamp);
      
    • 以下を使用して、タイムスタンプを MySQL に直接渡しますFROM_UNIXTIME()

      opp_deadline=FROM_UNIXTIME('$timestamp')
      

警告

  1. コードは SQL インジェクションに対して脆弱です。SQL で評価されないパラメーターとして変数を渡す、準備済みステートメント実際に使用する必要があります。私が何を話しているのか、またはそれを修正する方法がわからない場合は、Bobby Tablesの話を読んでください。

  2. また、関数に関するPHPマニュアルの章の紹介で述べたように:mysql_*

    この拡張機能は、新しいコードの作成にはお勧めできません。代わりに、mysqliまたはPDO_MySQL拡張機能を使用する必要があります。MySQL APIを選択する際のさらなるヘルプについては、 MySQL API の概要も参照してください。

于 2012-08-26T09:10:04.973 に答える
0

おっしゃるとおり、データベースのフィールドの型は です00-00-0000。次の形式で値を挿入します12-Aug-2012

月の値を「月名」から「数値」に変換する必要があります。たとえば、次のようになります。

Jan -> 01,
Feb -> 02 ...

あなたは要点を得ました。

その後、動作するはずです。

于 2012-08-26T09:09:26.007 に答える
0

テキストボックス 2013-12-24 に日付を挿入しようとしています。データベースの日付は 1970-01-01 を示しています

$date=$年 & $月 & $日; $date= Date("Ymd", strtotime($date));

    $query = "INSERT INTO `book` VALUES('$id', '$title', '$author_name', '$publisher', '$date' )";
于 2013-12-24T04:29:43.813 に答える
0

入力の日付形式が であることを確認する必要がありますYYYY-MM-DD12-Aug-2012は有効なMySQL 日付形式ではないため、エラーが返されます。

さらに、コードは SQL インジェクションに対して脆弱です。SQL インジェクションを防ぐためにデータベースにデータを挿入する際にmysql_real_escape_stringを使用することを強くお勧めします。迅速な解決策として、またはPDOまたはMySQLiを使用することをお勧めします。

挿入クエリは次のようになります。

  SET
 opp_provider='".mysql_real_escape_string($_POST['provider'])."'";
于 2012-08-26T09:15:33.120 に答える