1

重複の可能性:
NULL 変数をデータベースに挿入する

列を持つテーブル (ログ) があります。

秒: bigint(20) UNSIGNED NULL

IP アドレス: varchar(15) NULL

問題は、変数に値 NULL が指定されるたびに、変数がNULLとしてではなく IPAddress 列の空の文字列として列に挿入され、 Seconds 列の 0 として挿入されることです。

//PHP 5.3.9//

if(isset($_POST['sec']))
        $seconds = mysql_real_escape_string($_POST['sec']);
else
    $seconds = NULL;

if(isset($_POST['ip']))
    $ipaddress = mysql_real_escape_string($_POST['ip']);
else
    $ipaddress = NULL;

$query = mysql_query("INSERT INTO log (Seconds, IPAddress) VALUES('".$seconds."', '".$ipaddress."')", $DbConnectionMyDb);

私はグーグル全体を検索しましたが、すべての回答は、変数$sec$ipが NULL になるかどうかを既に知っていることを前提としています。私の場合、それはPOSTデータに依存します。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

3
"" !== NULL
"NULL" !== NULL
NULL === NULL

挿入しています""

于 2012-11-13T18:25:07.740 に答える
1

変数を文字列に結合する時点で、変数のNULL値は空の文字列にキャストされます。実際に読み取るクエリを作成する必要があります。

VALUES (NULL, NULL)

ではなく

VALUES ("", "")

あなたはおそらくそれによって行うことができます:

if (is_null($seconds)) $seconds='NULL'; else $seconds='"'.$seconds.'"';
if (is_null($ipaddress)) $ipaddress='NULL'; else $ipaddress='"'.$ipaddress.'"';
$query = mysql_query("... VALUES(".$seconds.", ".$ipaddress.")", ...);

ただし、長期的には、プリペアドステートメントである種のデータベースライブラリまたはPDOを使用して、これらの種類のタスクを抽象化する方がよいでしょう。

于 2012-11-13T18:31:54.777 に答える