web-dev-qa-db-ja.com

MySQLおよびPHP-空の文字列ではなくNULLを挿入

データベースにいくつかの変数を挿入するMySQLステートメントがあります。最近、オプションの2つのフィールド($ intLat、$ intLng)を追加しました。現在、これらの値が入力されていない場合、空の文字列を値として渡します。明示的なNULL値をMySQLに渡す方法(空の場合)

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
          VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
                  '$intLat', '$intLng')";
mysql_query($query);
71
user547794

MySQLにNULLを渡すには、まさにそれを行います。

INSERT INTO table (field,field2) VALUES (NULL,3)

したがって、コードでif $intLat, $intLngemptyである場合は、'$intLat'または'$intLng'の代わりにNULLを使用してください。

$intLat = !empty($intLat) ? "'$intLat'" : "NULL";
$intLng = !empty($intLng) ? "'$intLng'" : "NULL";

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
          VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
                  $intLat, $intLng)";
123
Rocket Hazmat

値を渡さないと、デフォルトとしてnullが返されます。

ただし、引用符なしでWord NULLを渡すことができます。

13
dkretz

これは私にとってはうまくいきます:

INSERT INTO table VALUES ('', NULLIF('$date',''))

(最初の''はidフィールドをインクリメントします)

11

必要なことは、$variable =NULL; //で、それを挿入クエリで渡します。これにより、値がNULLとしてmysql dbに保存されます

11
Shahid Sarwar

通常、次のようにPHPからmySQLに通常の値を追加します。

function addValues($val1, $val2) {
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ('$val1', '$val2')";
    $result = mysql_query($query);
    db_close(); // just some code to close the DB
}

値が空/ null($ val1 == ""または$ val1 == NULL)で、0または空の文字列ではなく、SQLに次のようにNULLを追加する場合:

function addValues($val1, $val2) {
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
        (($val1=='')?"NULL":("'".$val1."'")) . ", ".
        (($val2=='')?"NULL":("'".$val2."'")) . 
        ")";
    $result = mysql_query($query);
    db_close(); // just some code to close the DB
}

Nullは、「 'NULL'」ではなく「NULL」として追加する必要があることに注意してください。 NULL以外の値は、「 '」。$ val1。 "'"などとして追加する必要があります。

これが役立つことを願って、ハードウェアデータロガーの一部にこれを使用しなければなりませんでした。一部のハードウェアデータロガーは温度と放射線を収集し、他は放射線のみを収集します。温度センサーがない場合、明らかな理由で、0ではなくNULLが必要でした(0も許容温度値です)。

3
radhoo

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

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$lng', '" . ($lat == '')?NULL:$lat . "', '" . ($long == '')?NULL:$long . "')";
mysql_query($query);
2
sikas

何らかの理由で、radhooのソリューションはうまくいきません。次の式を使用した場合:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
    (($val1=='')?"NULL":("'".$val1."'")) . ", ".
    (($val2=='')?"NULL":("'".$val2."'")) . 
    ")";

'null'(引用符付き)が引用符なしのnullの代わりに挿入され、整数ではなく文字列になりました。だから私は最終的に試しました:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
    (($val1=='')? :("'".$val1."'")) . ", ".
    (($val2=='')? :("'".$val2."'")) . 
    ")";

空白の結果、クエリに正しいnull(引用符なし)が挿入されました。

1
bobv

クエリを作成する前に変数を確認し、空の場合は文字列NULLに変更します

1
profitphp

あなたはそれを例えばすることができます

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
1
bernte