Eu tenho uma instrução MySQL que insere algumas variáveis no banco de dados. Recentemente, adicionei 2 campos que são opcionais ($ intLat, $ intLng). Agora, se esses valores não forem inseridos, passo uma string vazia como um valor. Como faço para passar um valor NULL explícito para o MySQL (se vazio)?
$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
fonte
fonte
$query
string,$intLat
e$intLng
não estão entre aspas. Então, quando as variáveis forem interpoladas, será, NULL, NULL);
.Se você não passar valores, obterá valores nulos para os padrões.
Mas você pode simplesmente passar a palavra NULL sem aspas.
fonte
Isso funciona muito bem para mim:
INSERT INTO table VALUES ('', NULLIF('$date',''))
(primeiro
''
campo de id de incrementos)fonte
NULLIF(expr1, expr2)
. Consulte dev.mysql.com/doc/refman/5.7/en/…Tudo que você precisa fazer é:
$variable =NULL;
// e passá-lo na consulta de inserção. Isso irá armazenar o valor como NULL em mysql dbfonte
Normalmente, você adiciona valores regulares a mySQL, a partir de PHP como este:
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 }
Quando seus valores são vazios / nulos ($ val1 == "" ou $ val1 == NULL), e você deseja que NULL seja adicionado ao SQL e não 0 ou string vazia, ao seguinte:
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 }
Observe que nulo deve ser adicionado como "NULL" e não como "'NULL'". Os valores não nulos devem ser adicionados como "'". $ Val1. "'", Etc.
Espero que isso ajude, eu apenas tive que usar isso para alguns registradores de dados de hardware, alguns deles coletando temperatura e radiação, outros apenas radiação. Para aqueles sem o sensor de temperatura, eu precisava de NULL e não de 0, por razões óbvias (0 também é um valor de temperatura aceito).
fonte
sua consulta pode ser a seguinte:
$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);
fonte
NULL
. Além disso, você está usando aNULL
palavra-chave PHPs (sem aspas ), que é avaliada como uma string vazia em um contexto de string, portanto, novamente, você está atribuindo uma string vazia .Verifique as variáveis antes de construir a consulta, se estiverem vazias, altere-as para a string NULL
fonte
você pode fazer isso por exemplo com
UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
fonte
$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."'")) . ")";
fonte