1

サイトを検索しましたが、同様の質問と回答が見つかりましたが、回答を見つけることができませんでした。4時間の検索の後、私は弾丸を噛んで質問することにしました.

必須ではないフォームに 4 つの日付フィールドがあります。いずれかのフィールドにエントリがある場合はデータベースに日付を入力し、空白のままの場合は null を入力したいと思います。

値が空かどうかをチェックするifステートメントがあり$value = null、そうでない場合は日付に変換するために使用$value = date("Y-m-d",strtotime($_post['value']))しますが、これはうまく機能します。

問題は私のクエリにあります。「$value」を使用すると、日付は正しく挿入されますが、null 値は挿入されません。これは、「null」を使用すると SQL が文字列と見なすためです。$value だけを使用すると、null は問題なく挿入されますが、日付は 0000-00-00 になります。

どんなアドバイスでも大歓迎です

今までアドバイスありがとう…

Null が許可されています。これは私のスクリプトです...

if(empty($_POST['fp32_original_install_date'])){
$fp32_install = NULL;
    }else{
$fp32_install = date("Y-m-d",strtotime($_POST['fp32_original_install_date']));
 }

 $sql = "INSERT INTO accounts_cstm (id_c, support_c, install_date_c, sware_renewal_date_c, product_key_c, account_status_c, fp32_support_type_c, fp32_support_renewal_date_c, fp32_original_install_date_c) VALUES ('$Guid','$cdr_support', '$cdr_install', '$cdr_renew', '$prod_key', '$account_status', '$fp32_support', '$fp32_renew', $fp32_install)";

クエリで $fp32_install を使用すると、null 値は問題なく入力されますが、日付は 0000-00-00 として入力されます。「$fp32_install」を使用すると、日付は問題なく入力されますが、NULL 値は 1970-01- として入力されます。 01 (おそらく 'NULL' を文字列と見なすため)

$fp32_install をエコーすると、値は 2012-08-16 と表示され、列の SQL タイプは日付で、デフォルトは NULL です。

4

2 に答える 2

1

フォームからポストされた値を使用している場合、$_POST['value'] は NULL になりません。

代わりに、空の値を確認する必要があります。

if($_POST['value']=="")
{
    $value="NULL";
}
else 
{
    $value="'".date("Y-m-d",strtotime($_POST['value']))."'";
}
于 2012-08-16T16:13:03.333 に答える
0

あなたが説明した動作から、DATE列がDEFAULT 0句で定義されているか、無効な値を提供しているように聞こえます。

MySQLのドキュメントによると:

<中略>

無効な DATE、DATETIME、または TIMESTAMP 値は、適切なタイプ ('0000-00-00' または '0000-00-00 00:00:00') の「ゼロ」値に変換されます。

</中略>

サンプル コードを見ずに正確な問題を診断することは困難です。手始めに、データベースに送信されている SQL ステートメントをエコーアウトしてみることをお勧めします。

'NULL'私は、 DATE列の値が引用符で囲まれて表示されるのではないかと強く疑っていますNULL

于 2012-08-16T16:25:21.117 に答える