2017-04-03 85 views
0

我有一個名爲「Profiles」的數據庫。 這個數據庫包含兩個表名爲 「用戶」 和 「簡介」:用外鍵插入表 - PHP PDO

用戶:
USER_ID

電子郵件
密碼

概況:
PROFILE_ID
FIRST_NAME
姓氏
摘要

我正在使用PHP和PDO的CRUD場景。目前,我正在嘗試「添加」(創建)一個新的配置文件條目。分配狀態爲:「確保使用當前登錄用戶的外鍵user_id標記該條目(創建)」。

我不明白如何在PDO中將兩個表連接在一起。我收到以下錯誤:

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (profiles . profile , CONSTRAINT profile_ibfk_2 FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE) in /websites-mamp/asmt-profile/add.php:32 Stack trace: #0 /websites-mamp/asmt-profile/add.php(32): PDOStatement->execute(Array) #1 {main} thrown in /websites-mamp/asmt-profile/add.php on line 32

另外,CONSTRAINT profile_ibfk_2是什麼意思?

我的代碼是:

<?php 
session_start(); 
require_once "pdo.php"; 

// Validate field entries 
if (isset($_POST['first_name']) && isset($_POST['last_name']) && isset($_POST['summary'])) { 


    $sql = "INSERT INTO profile (first_name, last_name, summary) 
       VALUES (:first_name, :last_name, :summary)"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->execute(array(
     ':first_name' => $_POST['first_name'], 
     ':last_name' => $_POST['last_name'], 
     ':summary' => $_POST['summary'] 
     )); 
    $_SESSION['success'] = "Record added"; 
    header("Location: index.php"); 
    return; 
} 

?> 

<!DOCTYPE html> 
<html> 
<head> 
<title>Add</title> 
</head> 
<body> 

<div class="container"> 

    <form method="post"> 
     <p>First Name: 
     <input type="text" name="first_name" /></p> 
     <p>Last Name: 
     <input type="text" name="last_name" /></p> 
     <p>Summary: 
     <textarea type="text" name="summary"></textarea></p> 
     <input type="submit" value="Add"> 
     <input type="submit" name="logout" value="Cancel"> 
    </form> 

</div> 
</body> 
</html> 

代碼在哪裏連接到外鍵?我已經嘗試過WHERE子句,但這沒有幫助。有人可以很容易地解釋這個嗎我一直在探索StackOverflow來解決類似的問題,但其中大部分都在我的頭上,或者它不是PDO。任何幫助表示讚賞,謝謝。

+0

INSERT不允許where子句。爲了解決這個問題,只需添加外鍵,就像添加其他外鍵一樣。 – Akintunde007

+0

@MariaGosur我認爲你應該使用存儲過程。 – user3441151

+0

@ user3441151爲什麼OP必須使用存儲過程? –

回答

0

profile_ibfk_2是外鍵的名稱。您正試圖將您的profile表添加到行中,但您也不要設置user_id。因此更改您的INSERT聲明:

$sql = "INSERT INTO profile (first_name, last_name, summary, user_id) 
      VALUES (:first_name, :last_name, :summary, :user_id)"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array(
    ':first_name' => $_POST['first_name'], 
    ':last_name' => $_POST['last_name'], 
    ':summary' => $_POST['summary'], 
    ':user_id' => $whatEverToGetTheCurrentUserID, 
    )); 
+0

$ whatEverToGetTheCurrentUserID是否也會變成$ _POST ['user_id'];?我不明白$變量會是什麼? –

+0

此變量包含用戶的ID。這取決於你的應用程序。 – Kyoya