MySQL veritabanı için bir null değeri geçen

6 Cevap php

Bir kullanıcı bir form doldurur ve onlar gerekli değildir bir alanı doldurmak değil seçerseniz php yapar:

      if($_SESSION['numofchildren']=="")
         $_SESSION['numofchildren']=null;

Ben bir mysql sorguda oturum değişkeni kullanın Ama, sonuç boş değil, ama 0 olduğunu. Sütun NULL sağlayan bir Tinyint (4) 'dir.

Neden yerine null 0 alıyorum?

6 Cevap

Muhtemelen PHP 'null' içine 'nullunkine dönüştürmek değil çünkü. Muhtemelen sadece boş bir değer eklemiş olursunuz.

INSERT INTO TABLE (`Field`) ('')

Muhtemelen '0 'ayarlanmış sütun için varsayılan var ve bu bir sayı belirtin ya NULL sürece bir 0 eklemek anlamına gelir

INSERT INTO TABLE ('Field') (NULL)

Eğer sveyagu yapmadan önce bu sveyaunu gidermek için, null değerler için kontrol edin.

fveyaeach($values as $key => $value)
{
     if($value == null)
     {
         $values[$key] = "NULL";
     }
}

Ben ifadeleri automagically bunu yapmak için öngörü olacaktır hazırlanmış bir his var. Eğer inline ifadeleri yapıyveyasun Ama, eğer birkaç şey daha eklemek gerekir.

MySQL değerler etrafında tırnak olmalı, ama Nulls yok. Bu nedenle, bu kullanarak her şeyi alıntı ihtiyacımız olacak

fveyaeach($values as $key => $value)
{
     if($value == null)
     {
         $values[$key] = "NULL";
     }
     else
     {
         // Real Escape fveya Good Measure
         $values[$key] = "'" . mysql_real_escape_string($value) . "'";
     }
}

Eğer deyimi oluşturmak Sonra, herhangi bir değerler tırnak koymak değil emin olun

$SQL = "INSERT INTO TABLE (Field) VALUES(".$values['field'].")";

dönüşür

$SQL = "INSERT INTO TABLE (Field) VALUES("Test Value")";

veya

$SQL = "INSERT INTO TABLE (Field) VALUES(NULL)";

Içine takıyor hangisi tablo için Tablo tanımı bakabilirsiniz. Bu alan için 'varsayılan' değer muhtemelen sıfıra ayarlanır.

Kullandığınız MySql versiyonu belirlenmesinde oldukça önemli olduğunu tam olarak nasıl MySQL davranır Data Type Default Values.

Yukarıdaki bağlantı diyor:

For numeric types, the default is 0, with the exception that for integer or floating-point types declared with the AUTO_INCREMENT attribute, the default is the next value in the sequence.

null dize çözümlenir 0 olur. is_null () to check that first and place NULL kullanarak yerine sorguda 0 sahipsiniz.

Ya da, mükemmel ve hacker güvenli sorgu için PDO ve PDO::prepare kullanmayı deneyin.

Tüm Muhtemelen nerede, ama yapmak zorunda boş tırnak konur.

  if($_SESSION['numofchildren']=="")
    $_SESSION['numofchildren']='NULL';

I had the same problem some minutes ago, but then I figured it out. In my case I was making the query with the NULL variables between quotes like these ", '. Let me explain myself... This is what you want to do:

INSERT INTO `tbl_name` (`col1`, `col2`) VALUES (NULL,"some_value");

Bir NULL değişkeni kullanmak istiyorsanız Yani bu gibi, "NULL" olmalıdır:

$var1="NULL"; $var2="some_value";

Şimdi, $var2, sorgudaki '$var2' yazacaktır kullanmak için, ama sizin için aynı şeyi olmamalıdır istiyorsanız $var1:

INSERT INTO `tbl_name` (`col1`, `col2`) VALUES ($var1,'$var2');

Eğer koymak $var1 tırnak arasında, alırsınız bir 0 yerine NULL.

Bana veritabanında null VAR koymak için işe yaramadı, ben var karakter kullanılır (2).

Yani sadece 2 sorguları yaptı. Bu şekilde% 100 çalışacaktır. Lütfen Örneğin olurdu:

if($_SESSION['numofchildren']=="")
{
$updatequery="
            UPDATE table 
            SET table1='$value', table2='$value2', numofchilrdrentable=(NULL)
            ";
}
else
{
$updatequery="
            UPDATE table 
            SET table1='$value', table2='$value2', numofchilrdrentable='$_SESSION[numofchildren]'
            ";

}
$updatequeryresult=mysql_query($updatequery) or die("query fout " . mysql_error() );    

edit: var Char -> var char (2)