-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();
}

问题是,当我不在文本字段 PHONE 和 ADDRESS 中输入值时,它们在我的数据库中设置为 0 而不是 NULL!我该如何解决这个问题?

4

1 回答 1

1

发生这种情况是因为当您未在字段中填写任何内容时,您会收到一个空字符串。这NULL与将导致 PDO 将其转换为给定类型不同PDO::PARAM_INT

要插入NULL,您必须传递NULL给 PDO:

$insertSQL->bindValue(
    ':d', 
    $_POST['PHONE'] ?: NULL, 
    PDO::PARAM_INT
);
于 2013-10-29T13:37:03.610 回答