2017-03-07 100 views
-2

有很多與此相關的答案,但我找不到有用的信息。我試圖連接到數據庫並將用戶輸入的值插入到數據庫中,但是我得到了這個錯誤,我真的不知道我做錯了什麼。我在兩個不同的文件中創建了兩個不同的類,一個是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

我知道這裏有很多代碼,但如果有人感謝會盡力幫我...

+2

您正試圖將'null'值插入'name'列中,該列不允許爲空值。從列中刪除該限制或爲該列提供值。 (這看起來'$ this-> name'是'null'。) – David

+0

但是我已經爲它分配了一個變量$ _POST ['name'],它如何可以是空值?我不明白... – MKD

+1

首先,在你的類中依賴'$ _POST'是一種糟糕的設計。該值應該在構造函數中需要,而不是假定存在於某些外部依賴項中。至於有一個空值,顯然這個依賴沒有你期望的那樣。如果一個值不存在,它就是'null'。這就是'null'的意思。 – David

回答

2

錯誤似乎很清楚。表中有一列不能包含NULL值。

我會推測它不是你明確提供一個值的列(namesurnameemployment_date)。您需要查看錶格的定義並查找定義爲NOT NULL(或可能是PRIMARY KEY且沒有默認值)的另一列。

+0

我在我的表列中找不到任何錯誤:/ – MKD

+0

@Godron Linoff在我的表列值id中找到了'PRIMARY KEY',我該怎麼處理它?對不起,我只是想學習 – MKD

+1

@MKD:理想情況下它應該是一個'AUTOINCREMENT'列。儘管錯誤消息是指'name'列,而不是'id'列。你正在試圖爲'name'寫一個'null'值,它不允許有空值。 – David

相關問題