我有一个具有以下数据模型的 PostGreSQL 数据库:
CREATE TABLE staff (s_id serial UNIQUE, name, username, password, email)
CREATE TABLE institution (i_id serial UNIQUE, name);
CREATE TABLE isStaffOf (i_id, s_id); //foreign key references
当用户提交表单时,我有一个 PHP 脚本,它将信息写入前两个数据表并自动生成 s_id 和 i_id 值。伟大的!
我已经尝试了一些 PHP 修改,以使系统将 s_id 和 i_id 写入 isStaffOf 关系,以便它可以强制执行我的项目所需的显式 1..1 关系,但在提交时它说我的数据类型不足。请参阅下面的 PHP 代码。
$name = $_POST["name"];
$username = $_POST["username"];
$password = $_POST["password"];
$email = $_POST["email"];
$institution = $_POST["institution"];
$conn = pg_connect("host=***** port=**** dbname=****** user=**** password=******");
$staffWrite = pg_query("INSERT INTO staff(name, username, password, email) VALUES ('$name', '$username', '$password', '$email')");
$instiWrite = pg_query("INSERT INTO institution(name) VALUES ('$institution')");
$instiFK=pg_query("SELECT i_id FROM institution WHERE name='$institution'");
$staffFK=pg_query("SELECT s_id FROM staff WHERE name='$username'");
$sql=("INSERT INTO isstaffof(i_id, s_id) VALUES ('$instiFK', '$staffFK')");
$result = pg_query($sql);
那是我目前拥有的脚本,但它不起作用。关于如何解决这个问题的任何想法,以便当用户提交所有数据表时将被填充并强制执行参照完整性?我快到了,还在尝试,但无济于事。
错误信息:
ERROR: invalid input syntax for integer: "Resource id #4" LINE 1: INSERT INTO isstaffof(i_id, s_id) VALUES ('Resource id #4', ...
如果您需要更多解释,请告诉我,但我确信它很清楚我想要实现的目标,并且我相信我可以在没有这么多pg_query
电话的情况下做到这一点。