完整性约束冲突:1048列“名称”不能为空错误

MKD*_*MKD 1 php mysql oop

有很多与此相关的答案,但我无法找到有用的信息。我试图连接到数据库并将用户输入的值插入数据库,但是出现此错误,我严重不知道自己在做什么错。我在2个不同的文件创建2个不同的类,一个是connection.php,另一个是users.php(用于insterting用户到数据库)有人能帮助我解决这个问题?

这里是我的connection.php文件:

<?php

class Connection {
public $dbh;
    // Setting Database Source Name (DSN)
public function __construct() {
$dsn = 'mysql:host=localhost;dbname=employees';
// Setting options
 $options = array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
// Making the connection to the database
try {
$this->dbh = new PDO($dsn, 'root', '', $options); 
}
catch (PDOException $e) {
$this->error = $e->getMessage();
        }
    }
}
$connection = new connection();
?>
Run Code Online (Sandbox Code Playgroud)

这是我的users.php文件:

<?php
 error_reporting(E_ALL);
ini_set('display_errors', 1);
include 'connection.php';
class Users {
public $name;
public $surname;
public $employmentDate;
public $connection;
public function __construct($connection)
{
$this->connection = $connection;
if(isset($_POST['Submit'])) {
$this->name = $_POST['name'];
$this->surname = $_POST['surname'];
$this->employmentDate = $_POST['employmentDate'];
}
}
// Inserting users values to the database table
public function insertUserValues() {
 $query= 'INSERT INTO employee (name,surname,employment_date)
 VALUES (:name,:surname,:employmentDate)';
 $stmt = $this->connection->dbh->prepare($query);
 $stmt->bindValue(':name',$this->name, PDO::PARAM_STR);
 $stmt->bindValue(':surname',$this->surname, PDO::PARAM_STR);
 $stmt->bindValue(':employmentDate',$this->employmentDate, PDO::PARAM_STR);
 $stmt->execute();
}
}
$users = new Users($connection);
$users->insertUserValues();
?>
Run Code Online (Sandbox Code Playgroud)

我在users.php第27行出现此错误,它是:

$stmt->execute();

它说:

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null

我知道这里有很多代码,但由于如果有人会尽量帮我...

Gor*_*off 5

该错误似乎很明显。您在表中有一列不能采用NULL值。

我猜测,这是不是你明确提供值的列中的一个(namesurnameemployment_date)。你需要看一下表和外观的定义界定为另一列NOT NULL(或者PRIMARY KEY没有默认值)。

  • @MKD:理想情况下它应该是一个 `AUTOINCREMENT` 列。尽管错误消息指的是 `name` 列,而不是 `id` 列。您正在尝试向 `name` 写入一个 `null` 值,该值不允许为空值。 (2认同)