我不明白为什么 MySQL 会导致 PHP PDO 抛出这个错误:
致命错误:未捕获的异常 'PDOException' 带有消息'SQLSTATE [23000]:完整性约束违规:1048 列'免责声明'不能为空'[...]
这个特殊的表单前端和后端涉及相当多的代码,所以我只引用相关的部分。
HTML:
<label for="disclaimer" class="container ten columns">*Blah blah legalese</label>
<input type="checkbox" name="dislcaimer" value="disclaimer">
PHP:
if(!isset($_POST['fname']) ||
!isset($_POST['sname']) ||
!isset($_POST['email']) ||
// and so on ...
!isset($_POST['dislcaimer']) ||
(
!isset($_POST['mf'])&&!isset($_POST['me'])&&!isset($_POST['ms'])&&!isset($_POST['wf'])&&!isset($_POST['we'])&&!isset($_POST['ws'])
)
)
{
died('We are sorry, but you appear to have left at least one of the mandatory fields blank.');
}
[...]
$disclaimer = $_POST['disclaimer']; // variable initialisation
PHP/PDO:
$data = array($first_name, $last_name, $email_from, $telephone, $dateofbirth, $licence, $club, $countynm, $mf, $me, $ms, $wf, $we, $ws, $party, $disclaimer);
$STH = $dbh->prepare("INSERT INTO competitor (fname, sname, email, phone, dob, licence, club, country, mf, me, ms, wf, we, ws, party, disclaimer) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$STH->execute($data);
MYSQL:
我只是不明白。在调试复选框返回NULL,但它肯定应该触发未填写必填字段时生成的自动错误?我在此设置中处理复选框是否完全错误?对于其他可选复选框,我会为它们分配一些整数,以防它们被取消勾选(例如“0”),这样就不会出现这种错误。我是否需要为此做同样的事情,但如果设置了它,则分配它可能是“1”......?:/