Php 完整性约束冲突:1048列';名称';不能为空错误

Php 完整性约束冲突:1048列';名称';不能为空错误,php,mysql,oop,Php,Mysql,Oop,与此相关的答案很多,但我找不到有用的信息。我试图连接到数据库并将用户输入的值插入其中,但我遇到了这个错误,我真的不知道我做错了什么。我在两个不同的文件中创建了两个不同的类,一个是connection.php,另一个是users.php(用于将用户插入数据库),有人能帮我解决这个问题吗 这是我的connection.php文件: <?php class Connection { public $dbh; // Setting Database Source Name (DSN) p

与此相关的答案很多,但我找不到有用的信息。我试图连接到数据库并将用户输入的值插入其中,但我遇到了这个错误,我真的不知道我做错了什么。我在两个不同的文件中创建了两个不同的类,一个是connection.php,另一个是users.php(用于将用户插入数据库),有人能帮我解决这个问题吗

这是我的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();
?>
<?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();
?>

这是我的users.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();
?>
<?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();
?>

我在users.php第27行遇到了这个错误,它是:

$stmt->execute()

上面写着:

致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1048列“name”不能为null


我知道这里有很多代码,但是如果有人能帮助我,谢谢你…

错误似乎很清楚。表中有一列不能接受
NULL


我推测这不是您明确提供值的列之一(
姓名
姓氏
就业日期
)。您需要查看表的定义,并查找另一列定义为
notnull
(或者可能是
PRIMARY KEY
,没有默认值)。

确保该列标记为PRIMARY KEY或auto_increment(如果以这种方式使用),或者,如果要存储null,请将其标记为null。

这可能是与该字段相关的任何问题。检查HTML的拼写、名称和值之间的混淆等。 您的字段可能为空,因为它找不到您在字段中实际输入的值,因为每个代码没有这样的字段(仅在屏幕上)。就我而言,我有

$new\u user=array(
“id”=>$\u POST['id'],
“fname”=>$\u POST['firstname']

但是HTML使用fname和fname作为值和名称

还有第一个错误:name=“firstname”写为vname=“firstname” 然后是名称和HTML值的混淆


您没有发布HTML。错误可能就在那里。

您试图在
name
列中插入一个
null
值,该列不允许空值。请从列中删除该限制或为列提供一个值。(看起来
$this->name
null
)但是我分配了一个变量$u POST['name']对它来说,它怎么可能是空值呢?我不明白…首先,你的类中对
$\u POST
的依赖是一种糟糕的设计。构造函数上应该需要这个值,而不是假设它存在于一些外部依赖中。至于空值,显然这个依赖没有你所期望的。如果ue不存在,它是
null
。这就是
null
的意思。嗯,我在我的表列中找不到任何错误:/@Godron Linoff在我的表列值id中找到,它是
主键
,我该怎么处理它?很抱歉提出一些愚蠢的问题,但我只是想问一下learn@MKD:理想情况下,它应该是一个
AUTOINCREMENT
列。虽然错误消息指的是
名称
列,而不是
id
列。您正在尝试将
null
值写入
名称
,该值不允许为空。@David那么我如何解决此问题?我需要查找什么?我的表来自4行:
id、姓名、姓氏、雇员oyment_date
并且id是
自动递增的
.Meh,我真的无法获取it@MKD:您有两种选择:(1)为
name
列提供一个值(您的代码正试图这样做,但关于该变量中存在值的假设是不正确的);或(2)将列更改为允许
null
值。这真的再简单不过了。如果需要一个值,那么就需要一个值。