插入mySQL

时间:2016-04-13 21:03:18

标签: php mysql

所以我有3个表:donorblood_typeuser_account。我正在尝试填充包含donoruser_id的{​​{1}}表,但blood_idblood_group表之间没有联接,所以我尝试了这个,但它没有奏效。谁能告诉我我做错了什么?我是php和数据库的新手。

user_account

2 个答案:

答案 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)

该代码段有一些问题:

  1. 第15行:你有一个流氓' w'在$ sql变量之前的行的开头
  2. 所有$ _POST参数都必须采用$ _POST格式['参数'](缺少引号,请记住在某些地方逃避已引用的参数)
  3. 第14行中的where子句子选择查询是从不存在的表中选择的(blood_type)
  4. 我想你想要实现的是' user_account'和#'捐赠者'您可以更好地将外键存储在' donor_id'的用户帐户表中,或者将两者链接在一起的矩阵/映射表。

    矩阵/映射表将保存user_account和donor的主键日期以创建矩阵。

    然后,您可以从另一方获取任何表格信息,只知道信息的一面。

    我还要确保您在查询中转义入站变量以防止任何SQL注入攻击(see here