Mam instrukcję MySQL, która wstawia niektóre zmienne do bazy danych. Niedawno dodałem 2 pola, które są opcjonalne ($ intLat, $ intLng). W tej chwili, jeśli te wartości nie są wprowadzone, przekazuję jako wartość pusty ciąg. Jak przekazać jawną wartość NULL do MySQL (jeśli jest pusta)?
$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long',
'$intLat', '$intLng')";
mysql_query($query);
php
mysql
null
sql-insert
user547794
źródło
źródło
$query
znaków$intLat
i$intLng
nie są cytowane. Tak więc, gdy zmienne są interpolowane, będzie, NULL, NULL);
.Jeśli nie przekażesz wartości, otrzymasz wartości null dla wartości domyślnych.
Ale możesz podać słowo NULL bez cudzysłowów.
źródło
To działa dobrze dla mnie:
INSERT INTO table VALUES ('', NULLIF('$date',''))
(
''
pole id pierwszego przyrostu)źródło
NULLIF(expr1, expr2)
. Zobacz dev.mysql.com/doc/refman/5.7/en/…Wszystko, co musisz zrobić, to:
$variable =NULL;
// i przekazać to w zapytaniu wstawiającym. Spowoduje to zapisanie wartości jako NULL w bazie danych mysqlźródło
Zwykle dodajesz zwykłe wartości do mySQL, z PHP w ten sposób:
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 }
Gdy twoje wartości są puste / null ($ val1 == "" lub $ val1 == NULL) i chcesz, aby NULL zostało dodane do SQL, a nie 0 lub pusty ciąg, do następującego:
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 }
Zauważ, że wartość null musi zostać dodana jako „NULL”, a nie jako „NULL” ”. Wartości inne niż null należy dodać jako „'". $ Wart1. "'" Itd.
Mam nadzieję, że to pomoże, po prostu musiałem użyć tego do niektórych rejestratorów danych sprzętowych, niektóre z nich zbierają temperaturę i promieniowanie, a inne tylko promieniowanie. Dla tych bez czujnika temperatury potrzebowałem NULL a nie 0, z oczywistych powodów (0 to również akceptowana wartość temperatury).
źródło
Twoje zapytanie może wyglądać następująco:
$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);
źródło
NULL
. Używasz równieżNULL
słowa kluczowego PHP (bez cudzysłowów), którego wynikiem jest pusty ciąg w kontekście łańcucha, więc ponownie przypisujesz pusty ciąg .Sprawdź zmienne przed zbudowaniem zapytania, jeśli są puste, zmień je na ciąg NULL
źródło
możesz to zrobić na przykład za pomocą
UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
źródło
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". (($val1=='')?"NULL":("'".$val1."'")) . ", ". (($val2=='')?"NULL":("'".$val2."'")) . ")";
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". (($val1=='')? :("'".$val1."'")) . ", ". (($val2=='')? :("'".$val2."'")) . ")";
źródło