我正在努力使用PHP语句将mySQL数据插入到多个表中。
我有两张桌子:
用户
user_ID(PK)
如first_name
姓氏
电子邮件
密码
配置文件
profile_ID(PK)
user_ID(FK)
profile_image
profile_image_name
我像这样更新用户表:
$sql = "INSERT INTO user (first_name, last_name, email, password)
VALUES
('$_POST[first_name]', '$_POST[last_name]', '$_POST[email]', '$_POST[password]')";
user_ID在数据库中设置为自动递增,因此在执行此代码时,插入的数据会自动分配给唯一的PK,并存储在会话中。在同一点上(创建帐户)我需要将user_ID作为FK插入到配置文件表中。这样,当用户上传他们的个人资料图片时,它将被分配给他们将在个人资料表中有一个记录。
例如,在图片上传页面上我使用此代码:
$user_ID = $_SESSION['login'];
$ins1 = mysqli_query($db, "UPDATE profile SET `profile_image_name`='" . $profile_image_name . "' WHERE `user_ID`='$user_ID'");
$ins2 = mysqli_query($db, "UPDATE profile SET `profile_image`='" . $profile_image . "' WHERE `user_ID`='$user_ID'");
此代码仅在配置文件表中已存在user_ID FK时才有效,因此如何使用我之前执行过的php语句插入它?我再次尝试使用第一种方法,但它似乎并没有起作用......
答案 0 :(得分:4)
您可以使用insert_id
获取在Mysql上插入的最后一次PK自动增量
答案 1 :(得分:0)
插入会创建新记录,更新会更改现有记录。使用您当前的方案,您需要插入配置文件。显然,这意味着您不能使用相同的代码来创建用于更改配置文件的配置文件。但还有另一个选项REPLACE与INSERT具有相同的语法,但会覆盖现有记录。
但是,如果每个用户只有一个配置文件,则详细信息应保存在一个表中,而不是两个。
评论:将密码存储为纯文本是一个非常糟糕的主意,请阅读密码散列。您还应该使用Google for SQL注入;您的身份验证很容易绕过并且很容易破坏。
答案 2 :(得分:0)
试试这个:
INSERT INTO
`profile`(`user_ID`,`profile_image`,`profile_image_name`)
VALUES
('$user_ID','$profile_image','$profile_image_name')
ON DUPLICATE KEY UPDATE
`profile_image`='$profile_image',`profile_image_name`='$profile_image_name'
user_ID
必须是唯一的