2017-04-03 2 views
0

"프로필"이라는 데이터베이스가 하나 있습니다.외래 키가있는 테이블에 삽입 - PHP PDO

사용자 :
USER_ID
이름
이메일
비밀번호

프로필 : 이 데이터베이스는 "사용자"와 "프로파일"라는 두 개의 테이블이 포함
FIRST_NAME을 PROFILE_ID


last_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

관련 문제