所以我有3个表:donor
,blood_type
,user_account
。我正在尝试填充包含donor
和user_id
的{{1}}表,但blood_id
和blood_group
表之间没有联接,所以我尝试了这个,但它没有奏效。谁能告诉我我做错了什么?我是php和数据库的新手。
user_account
答案 0 :(得分:2)
您可以使用SELECT
子句生成INSERT
的值。在这种情况下,您可以使用它从其他表中选择适当的值。
INSERT INTO donor (user_id, blood_id, first_name,last_name,email_add,gender, birthday, telephone, city, last_donation)
SELECT u.user_id, b.blood_id,
'$_POST[fname]', '$_POST[lname]', '$_POST[email]', '$_POST[gender]', '$_POST[Birthday]', '$_POST[Telephone]', '$_POST[city]', '$_POST[lastdonation]'
FROM user_accounts AS u
CROSS JOIN blood_type AS b
WHERE u.username = '$_POST[user]' AND b.blood_group= '$_POST[bloodgroup]'
我还强烈建议您使用准备好的查询而不是替换$_POST
变量,因为后者会让您进行SQL注入。我还建议不要使用mysqli_multi_query
- 它很少需要,只会更难以检查成功。如果您使用单独的查询插入user_accounts
,则可以使用mysqli_insert_id($conn)
在插入user_id
时分配user_accounts
,而不是使用上述JOIN
}}。您还可以使用MySQL内置函数LAST_INSERT_ID()
来获取它。
$stmt = mysqli_prepare($conn, "INSERT INTO user_account(username, password) VALUES (?, ?);") or die("Can't prepare user_account query: " . mysqli_error($conn));
mysqli_stmt_bind_param($stmt, "ss", $_POST['user'], $_POST['psw']);
mysqli_execute($stmt);
$stmt2 = mysqli_prepare($conn, "
INSERT INTO donor (user_id, blood_id, first_name,last_name,email_add,gender, birthday, telephone, city, last_donation)
SELECT LAST_INSERT_ID(), b.blood_id, ?, ?, ?, ?, ?, ?, ?, ?
FROM blood_type AS b
WHERE b.blood_group= ?") or die ("Can't prepare donor query: " . mysqli_error($conn));
mysqli_stmt_bind_param($stmt2, "sssssssss", $_POST['fname'], $_POST['lname'], $_POST['email'], $_POST['gender'], $_POST['Birthday'], $_POST['Telephone'], $_POST['city'], $_POST['lastdonation'], $_POST['bloodgroup']);
mysqli_execute($stmt2);
答案 1 :(得分:0)
该代码段有一些问题:
我想你想要实现的是' user_account'和#'捐赠者'您可以更好地将外键存储在' donor_id'的用户帐户表中,或者将两者链接在一起的矩阵/映射表。
矩阵/映射表将保存user_account和donor的主键日期以创建矩阵。
然后,您可以从另一方获取任何表格信息,只知道信息的一面。
我还要确保您在查询中转义入站变量以防止任何SQL注入攻击(see here)