有很多與此相關的答案,但我找不到有用的信息。我試圖連接到數據庫並將用戶輸入的值插入到數據庫中,但是我得到了這個錯誤,我真的不知道我做錯了什麼。我在兩個不同的文件中創建了兩個不同的類,一個是connection.php,另一個是users.php(用於將用戶插入數據庫)有人可以幫我解決這個問題嗎?完整性約束違規:1048列'name'不能爲空錯誤
這裏是我的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->execute();
它說:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
我知道這裏有很多代碼,但如果有人感謝會盡力幫我...
您正試圖將'null'值插入'name'列中,該列不允許爲空值。從列中刪除該限制或爲該列提供值。 (這看起來'$ this-> name'是'null'。) – David
但是我已經爲它分配了一個變量$ _POST ['name'],它如何可以是空值?我不明白... – MKD
首先,在你的類中依賴'$ _POST'是一種糟糕的設計。該值應該在構造函數中需要,而不是假定存在於某些外部依賴項中。至於有一個空值,顯然這個依賴沒有你期望的那樣。如果一個值不存在,它就是'null'。這就是'null'的意思。 – David