【问题标题】:Integrity constraint violation: 1048 Column 'name' cannot be null error [duplicate]完整性约束违规:1048 列“名称”不能为空错误 [重复]
【发布时间】:2017-03-07 11:54:01
【问题描述】:

有很多与此相关的答案,但我找不到有用的信息。我正在尝试连接到数据库并将用户输入的值插入其中,但是我收到了这个错误,我真的不知道我做错了什么。我在 2 个不同的文件中创建了 2 个不同的类,一个是 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();
?>

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

我在 users.php 第 27 行收到此错误,即:

$stmt-&gt;execute();

它说:

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

我知道这里有很多代码,但是如果有人愿意帮助我,谢谢...

【问题讨论】:

  • 您正在尝试将 null 值插入到 name 列中,该列不允许空值。从列中删除该限制或为列提供值。 (看起来$this-&gt;namenull。)
  • 但是我已经为它分配了一个变量 $_POST['name'] ,它怎么可能是空值?我不明白...
  • 一方面,在你的班级中对$_POST 的依赖是一种糟糕的设计。该值应该是构造函数所必需的,而不是假定存在于某些外部依赖项中。至于有一个空值,显然该依赖项没有您期望的那样。如果值不存在,则为null。这就是null 的意思。

标签: php mysql oop


【解决方案1】:

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

我推测它不是您明确提供值的列之一(namesurnameemployment_date)。您需要查看表的定义并查找定义为NOT NULL 的另一列(或者可能是PRIMARY KEY,没有默认值)。

【讨论】:

  • 嗯,我的表格列中找不到任何错误:/
  • @Godron Linoff 在我的表列值 id 中找到,即PRIMARY KEY,我该怎么办?对不起,愚蠢的问题,但我只是想学习
  • @MKD:理想情况下它应该是一个AUTOINCREMENT 列。虽然错误消息是指name 列,而不是id 列。您正在尝试将null 值写入name,这不允许空值。
  • @David 那么我该如何解决这个问题呢?我需要寻找什么?我的表来自 4 行:id, name, surname, employment_date,id 是AUTO INCREMENT。呸,实在看不懂
  • @MKD:您有两个选择:(1) 为name 列提供一个值(您的代码尝试这样做,但假设该变量中存在的值是不正确的);或 (2) 更改列以允许 null 值。它真的不能比这更简单了。如果一个值是必需的,那么一个值是必需的
【解决方案2】:

如果您以这种方式使用该列,请确保将该列标记为主键或 auto_increment,如果您想存储 null,请确保将其标记为 null。

【讨论】:

    【解决方案3】:

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

    $new_user = array( "id" => $_POST ['id'], "fname" => $_POST['firstname']

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2021-01-13
      • 2018-05-01
      • 2021-09-25
      相关资源
      最近更新 更多