错误:SQLSTATE [23000]:完整性约束违规:1048列“注释”不能为空

时间:2017-09-25 07:15:30

标签: php pdo

我已经尝试检查相关帖子,但它似乎无法帮助我解决手头的问题。我正在尝试为数据保存在数据库中的约会创建一个页面。但是,这两个错误信息一直出现在我的窗口上:

  

注意:未定义的索引:C:\ xampp \ htdocs \ db \ connect2.php中的注释   第29行错误:SQLSTATE [23000]:完整性约束违规:   1048列“注释”不能为空

这是代码 的 PHP

<form name="appointments" action="" method="POST">
<label>Name (First/Last)</label> <br>
<input type="text" name="name" id="name" required="required" placeholder="Please Enter Name"> <br>
<label>Email Address</label> <br>
<input type="email" name="email" id="email" required="required" placeholder="youremail@yahoo.com"> <br>
<label>Phone Number</label> <br>
<input type="text" name="contactno" id="contactno" required="required" placeholder="9221234567"> <br>
<label>Nature of Appointment</label> <br>
<select name="service" id="service">
<option value="other">Other</option>
<option value="consultation">Consultation</option>
<option value="Surgery">Surgery</option>
</select> <br>
</div>
<label>Preferred Appointment Date</label> <br>
<input type="date" name="prefDate" id="prefDate"> <br>
<label>Comments</label> <br>
<textarea rows="12" cols="40" name="comments" form="usrform" placeholder="Your comments here..."></textarea> <br>
</div>
<input type="submit" class="btnRegister" name = "schedule" value="Send Your Request">
</form>

这是我的 connect2.php

<?php
    //Local Server Information
    $server = "127.0.0.1";
    $username = "root";
    $password = "";
    $db = "myDB";

    $name = "";
    $email = "";
    $contactno = "";
    $service = "";
    $prefDate = "";
    if (isset($_POST['comments']) && !empty($_POST['comments'])) {
        $comments = $_POST['comments'];
    } else {
        $comments = "";
    }
    //Check if connection was successful
    try {
        $con = new PDO("mysql:host=$server;dbname=$db","$username","$password");
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        if(isset($_POST['schedule']) )
        {
            $name = $_POST['name'];
            $email = $_POST['email'];
            $contactno = $_POST['contactno'];
            $service = $_POST['service'];
            $prefDate = $_POST['prefDate'];
            $comments = $_POST['comments'];


            $insert = $con->prepare("INSERT INTO appointments(name, email,contactno, service, prefDate, comments) values(:name, :email, :contactno, :service, :prefDate, :comments)");

            $insert->bindParam(':name', $name);
            $insert->bindParam(':email', $email);
            $insert->bindParam(':contactno', $contactno);
            $insert->bindParam(':service', $service);
            $insert->bindParam(':prefDate', $prefDate);
            $insert->bindParam(':comments', $comments);

            $insert->execute();
        }
    } catch(PDOException $e) {
        //die("Oops! Something went wrong with your database.");
        echo "Error: ". $e->getMessage();
    }
?>

这是错误说明问题所在的行。

  

$ comments = $ _POST ['comments'];

我已经尝试过像@ comments =“you comment”那样硬编码; 它经历了没有错误,数据出现在数据库中。但是,当我使用上面的代码时,会出现错误。有人帮我请。我错过了什么?不知道出了什么问题,因为另一条线似乎有效。

感谢

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

$comments = !empty($_POST['comments']) ? $_POST['comments'] : 'Default Comment';

答案 1 :(得分:1)

错误消息告诉自己 - 您试图不在列中分配不能为空的值。解决方案是 - 在您的数据库表中,将默认值设置为null为comments字段。如果你使用phpmyadmin printscreen

或者您可以运行mysql查询(或您使用的其他数据库),类似这样的

ALTER TABLE <table name> MODIFY COLUMN comments <column type> DEFAULT NULL;

答案 2 :(得分:0)

因此尝试使用您的建议来修复它。而且似乎是我在php下输入的代码部分中的错误负责人。

public class VendorAction extends BaseAction {


    private String hiddenVendorId;





    public void setHiddenVendorId(String hiddenVendorId) {
        this.hiddenVendorId = hiddenVendorId;
    }


    public String createOrUpdateVendor(){
        LOGGER.info("entering createOrUpdateVendor method");
        String actionReturn;
        LOGGER.info("entering createOrUpdateVendor");
        String action = getServletRequest().getParameter("action");

        LOGGER.info("action"+action);
        vendorTypeDetailsDomainList = adminManager.findAllVendorType();
        LOGGER.info(vendorTypeDetailsDomainList.length + "vendorTypeDetailsDomainList.size");

        for(VendorDetails vendorDetailsBean : vendorTypeDetailsDomainList){    
            Vendor vendorType = new Vendor();
            vendorType.setVendorTypeId(vendorDetailsBean.getVendorTypeId());
            vendorType.setVendorTypeDesc(vendorDetailsBean.getVendorTypeDesc());
            vendorTypeDetailsListFE.add(vendorType);
        }
        if(action.equalsIgnoreCase("create")){
            vendor = new Vendor();
            vendor.setActiveFlag("true");
            //actionReturn = "createVendor"
        } else {
            LOGGER.info("action"+action);
            vendor = new Vendor();

            LOGGER.info(getHiddenVendorId()+"VENDOR ID");



        }
         return "success";
    }   
}

  

形式=&#34; usrform&#34;

删除它只是让代码工作。似乎表单在prefDate中停止,因为我在textarea标签上偶然分配了一个不同的表单名称。

感谢两位提出建议的人让我看到了什么问题