2017-04-03 11 views
0

"Profiles"というデータベースが1つあります。外部キーを持つテーブルへのINSERT - PHP PDO

ユーザー:
user_idの

メール
パスワード

プロファイル: このデータベースには、 "ユーザー" と "プロファイル" と呼ばれる2つのテーブルが含まれ
FIRST_NAMEを説明profile_id


last_name
概要

私はPHPとPDOを使用してCRUDシナリオに取り組んでいます。現在、私は新しいプロファイルエントリを「追加」(作成)しようとしています。割り当てには、「現在ログインしているユーザーの外部キーuser_idでエントリにマークを付けるようにしてください(作成)」。

私はPDOで2つのテーブルを一緒に接続する方法を理解していません。 CONSTRAINT profile_ibfk_2は何を意味し、また

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

:私は次のエラーを取得していますか?

私のコードは次のとおりです。

コードで、私は、外部キーに接続しない
<?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

関連する問題