我有一个名为“Profiles”的数据库。 该数据库包含两个名为“users”和“profiles”的表:
用户:
USER_ID
命名
电子邮件
密码
配置文件:
PROFILE_ID
FIRST_NAME
姓氏
摘要
我正在使用PHP和PDO开发CRUD场景。目前,我正在尝试“添加”(创建)新的个人资料条目。赋值声明:“确保使用当前登录用户的外键 user_id 标记条目。(创建)”。
我不明白如何在PDO中将两个表连接在一起。我收到以下错误:
致命错误:未捕获PDOException:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(
profiles
。profile
,CONSTRAINT {{1} } FOREIGN KEY(profile_ibfk_2
)REFERENCESuser_id
(users
)ON更新CASCADE ON UPDATE CASCADE)/websites-mamp/asmt-profile/add.php:32堆栈跟踪:#0 /websites-mamp/asmt-profile/add.php(32):在第32行的/websites-mamp/asmt-profile/add.php中抛出的PDOStatement-> execute(Array)#1 {main}
此外,user_id
是什么意思?
我的代码是:
CONSTRAINT profile_ibfk_2
我在代码中的哪个位置连接到外键?我已经尝试过WHERE子句,但这没有帮助。有人能轻易解释一下吗?我一直在这里探索StackOverflow类似的问题,但大多数都在我的头上,或者它不是PDO。感谢任何帮助,谢谢。
答案 0 :(得分: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,
));
答案 1 :(得分:0)
一种方法是,如果您有会话存储的user_id变量 由于您的代码中包含session_start,因此请将其放入您的login.php文件或用户进入主页之前的任何文件名,首先,您需要从登录界面登录后选择user_id
$user = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM tablename WHERE username = :user,password = :password";
$stmnt = $pdo->prepare($sql);
$stmnt->execute(array(':user'=>$user,':password'=>$password));
$data = $stmnt->fetch(PDO::FETCH_ASSOC);
$userid = $data['id'];
然后将您的用户ID像这样存储到会话中:
$_SESSION['currentid'] = $userid;
然后将用户ID添加到您的插入语句中:
$id = $_SESSION['currentid'];
if ( isset($_POST['first_name']) && isset($_POST['last_name']) && isset($_POST['summary'])) {
$sql = "INSERT INTO profile (first_name, last_name, summary,userid)
VALUES (:first_name, :last_name, :summary,:userid)";
$stmnt = $pdo->prepare($sql);
$stmnt->execute(array(
':first_name' => $_POST['first_name'],
':last_name' => $_POST['last_name'],
':summary' => $_POST['summary'],
':userid' => $id;
));
$_SESSION['success'] = "Record added";
header("Location: index.php");
return;
}
您必须在子表“个人档案”中具有外键,该“个人档案”已链接到父表“用户”,以防止使用外键对表进行完整性侵犯,前提是您的login.php文件或其他文件名中也包含session_start是。 或者,如果您没有登录界面,只需使用select搜索要插入配置文件的用户的用户ID,然后将其存储在任何变量中,也可以将其存储在这样的输入标签中:
<input type="hidden" name="userid" value="<?php echo $id; ?>">
只需确保将输入标签包含在要包含的表单中