完整性约束违规:1048列'FIELDNAME'不能为空

时间:2015-04-26 14:54:59

标签: php mysql pdo

好的,我发现人们对此提出了类似的问题,但似乎没有人能解决我的问题。

基本上我的错误日志中出现以下错误。

PHP致命错误:未捕获异常'PDOException',消息'SQLSTATE [23000]:完整性约束违规:1048 checkoutPayment.php中的列'firstName'不能为null':41 堆栈跟踪: checkoutPayment.php(41):PDOStatement-> execute(Array) 在第41行的checkoutPayment.php中抛出1 {main}

第41行是第二行到最后一行代码,其中包含......

$insertAddressQuery->execute(array_values($addressData));

第一部分检查数组中所有必需的结帐字段,如果它们是空白或空的等,则将它们推送到第二个数组中。

第二部分检查第二个数组以查看其中是否有任何值。如果有,那么必须缺少一些必填字段。然后它应该给我发电子邮件(在尝试解决问题的同时添加这个)并将客户发回篮子,因为我认为如果任何字段空白或丢失,他们甚至不应该这么做,因此他们的会话可能已经过期了。

第三部分更新地址(使用会话地址ID)或在没有会话地址ID的情况下插入新地址。

这是一个导致偶尔出现问题的地址插入。这不会一直发生,尽管将电子邮件方面放入代码中我没有发送电子邮件,但它已经在错误日志中发生了两次。

我猜测它与“=== NULL”部分有关但如果是这样我会收到几封电子邮件,所以我似乎无法解决错误。

###CHECK REQUIRED CHECKOUT FIELDS
$requiredCheckoutFields = array('billingFirstName','billingSecondName','billingAddress','billingTown','billingPostCode','billingCountry','billingTelephone','billingEmail','deliveryFirstName','deliverySecondName','deliveryAddress','deliveryTown','deliveryPostCode','deliveryCountry','termsConditions');
foreach($requiredCheckoutFields as $requiredCheckoutField) {
if (($_SESSION['basket'][$requiredCheckoutField]) === NULL) { array_push($requiredCheckoutFieldsMissing,$requiredCheckoutField); }
}

#DECIDE IF TO CONTINUE...
if (count($requiredCheckoutFieldsMissing) != 0) {
    #EMAIL ME AN ERROR
    $emailSubject = 'Checkout Error Report';
    $emailMessage = '<h1>Checkout Error Report</h1>';
    $emailMessage .= '<p>';
    foreach ($_SESSION['basket'] as $name => $value) { $emailMessage .= $name.'...'.$value.'<br />'; }
    $emailMessage .= '</p>';
    mail($reportEmailAddress, $emailSubject, $emailMessageHeader.$emailMessage.$emailMessageFooter, $emailHeaders);
    #SEND CUSTOMER BACK TO BASKET
    header('Location: basket.php');
}

#UPDATE OR INSERT TO DATABASE
else {
###BILLING ADDRESS
    #UPDATE
    if (isset($_SESSION['basket']['billingAddressID'])) {
        $updateAddressQuery=$dbConnection->prepare("UPDATE orders_addresses SET firstName = ?,secondName = ?,address = ?,address2 = ?,address3 = ?,town = ?,postcode = ?,country = ?,telephone = ?,email = ? WHERE id = ?");
        $addressData = array($_SESSION['basket']['billingFirstName'],$_SESSION['basket']['billingSecondName'],$_SESSION['basket']['billingAddress'],$_SESSION['basket']['billingAddress2'],$_SESSION['basket']['billingAddress3'],$_SESSION['basket']['billingTown'],$_SESSION['basket']['billingPostCode'],$_SESSION['basket']['billingCountry'],$_SESSION['basket']['billingTelephone'],$_SESSION['basket']['billingEmail'],$_SESSION['basket']['billingAddressID']);
        $updateAddressQuery->execute(array_values($addressData));
    }
    #ADD
    else {
        $placeholders = 'NULL,'.str_repeat('?,', 9).'?';
        $insertAddressQuery=$dbConnection->prepare("INSERT INTO orders_addresses (id,firstName,secondName,address,address2,address3,town,postcode,country,telephone,email) VALUES ($placeholders)");
        $addressData = array($_SESSION['basket']['billingFirstName'],$_SESSION['basket']['billingSecondName'],$_SESSION['basket']['billingAddress'],$_SESSION['basket']['billingAddress2'],$_SESSION['basket']['billingAddress3'],$_SESSION['basket']['billingTown'],$_SESSION['basket']['billingPostCode'],$_SESSION['basket']['billingCountry'],$_SESSION['basket']['billingTelephone'],$_SESSION['basket']['billingEmail']);
        $insertAddressQuery->execute(array_values($addressData));
        $_SESSION['basket']['billingAddressID'] = $dbConnection->lastInsertId();
    }
}

0 个答案:

没有答案