【发布时间】:2017-08-27 23:32:37
【问题描述】:
我有一个名为“Profiles”的数据库。 该数据库包含两个名为“users”和“profiles”的表:
用户:
用户ID
名称
电子邮件
密码
个人资料:
profile_id
名字
姓氏
总结
我正在使用 PHP 和 PDO 处理 CRUD 场景。目前,我正在尝试“添加”(创建)一个新的配置文件条目。分配声明:“确保使用当前登录用户的外键 user_id 标记条目。(创建)”。
我不明白如何在 PDO 中将两个表连接在一起。我收到以下错误:
致命错误:未捕获的 PDOException:SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 (
profiles.profile, CONSTRAINTprofile_ibfk_2FOREIGN KEY (@987654324 @) 参考users(user_id) ON DELETE CASCADE ON UPDATE CASCADE) in /websites-mamp/asmt-profile/add.php:32 堆栈跟踪:#0 /websites-mamp/asmt-profile/add.php (32): PDOStatement->execute(Array) #1 {main} 在第 32 行的 /websites-mamp/asmt-profile/add.php 中抛出
另外,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。任何帮助表示赞赏,谢谢。
【问题讨论】:
-
INSERT 不允许使用 where 子句。要解决此问题,只需像添加其他外键一样添加外键。
-
@MariaGosur 我认为你应该使用存储过程。
-
@user3441151 为什么 OP 必须使用存储过程?
-
@Akin 您能否详细说明添加外键的方式与添加其他键的方式相同吗?我不是很明白..
标签: php mysql pdo insert foreign-keys