【发布时间】:2016-07-22 16:27:31
【问题描述】:
我正在努力使用 PHP 语句将 mySQL 数据插入到多个表中。
我有两张桌子:
用户
user_ID (PK)
名字
姓氏
电子邮件
密码
个人资料
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 语句插入它,就像我之前所做的那样?我再次尝试使用第一种方法,但它似乎不起作用......
【问题讨论】:
-
警告:当使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您将创建严重的SQL injection bugs。 从不将$_POST数据直接放入查询中。 -
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。在这个简短的示例中,您有许多危险的SQL injection vulnerabilities 来自鲁莽地缺少proper escaping。当任何现代的development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。