2013-10-29 48 views
-1

我用下面的代码在MySQL中插入数据:数据插入,而字段为空

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 
$insertSQL=$conn->prepare("INSERT INTO table (ID, COUNTRY, POSTAL_CODE, ADDRESS, PHONE, FAX) VALUES (:a, :b, :c, :d, :e, :f)"); 
    $insertSQL->bindValue(':a', $_POST['ID'], PDO::PARAM_INT); 
    $insertSQL->bindValue(':b', $_POST['COUNTRY'], PDO::PARAM_STR); 
    $insertSQL->bindValue(':c', $_POST['POSTAL_CODE'], PDO::PARAM_INT); 
    $insertSQL->bindValue(':d', $_POST['ADDRESS'], PDO::PARAM_STR); 
    $insertSQL->bindValue(':e', $_POST['PHONE'], PDO::PARAM_INT); 
    $insertSQL->bindValue(':f', $_POST['FAX'], PDO::PARAM_INT); 
$insertSQL->execute(); 
} 

的问题是,当我不文本字段电话和地址都输入值,他们在我的数据库中设置为0而不是NULL! 我该如何解决这个问题?

回答

1

发生这种情况的原因是,如果您未在字段中填充任何内容,则会收到一个空字符串。这是不一样的NULL,将导致PDO将其转换为给定类型PDO::PARAM_INT

要插入NULL,你必须通过NULL到PDO:

$insertSQL->bindValue(
    ':d', 
    $_POST['PHONE'] ?: NULL, 
    PDO::PARAM_INT 
); 
+0

这个我第一次看到这样的事情,它完美作品 – Anibel

+0

没有什么说“这工作完美”超过[公认的答案](http://stackoverflow.com/about)。 – NDM

+0

你明白了@NDM – Anibel