簡體   English   中英

插入MySQL

[英]INSERT into mySQL

所以我有3個表: donorblood_typeuser_account 我正在嘗試填充包含user_idblood_iddonor表,但是blood_groupuser_account表之間沒有blood_group ,因此我嘗試了此操作,但是沒有用。 有人可以告訴我我做錯了嗎? 我對php和數據庫非常陌生。

<?php
if(isset($_POST['submit'])) { 

    $conn = mysqli_connect("localhost", "root" , "");

    if(!$conn) { 
        die("Cannot connect: "); 
    }

    mysqli_select_db($conn,"blood_bank_project"); 

    $sql = "INSERT INTO user_account(username, password) VALUES ('$_POST[user]', '$_POST[psw]');";
    $sql .="INSERT INTO donor(first_name,last_name,email_add,gender, birthday, telephone, city, last_donation,user_id, blood_id)VALUES('$_POST[fname]', '$_POST[lname]', '$_POST[email]', '$_POST[gender]', '$_POST[Birthday]', '$_POST[Telephone]', '$_POST[city]', '$_POST[lastdonation]')";  
    $sql .="UPDATE donor SET blood_id = (SELECT blood_id from blood_type where blood_group= '$_POST[bloodgroup]');";  
    $sql .="UPDATE donor SET user_id = (SELECT user_id from user_account where username= '$_POST[user]')"; 

    if(mysqli_multi_query($conn, $sql)){ 
        echo'executed'; 
    } 
} 
?>

您可以使用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變量,因為后者會使您$_POST SQL注入。 我還建議不要使用mysqli_multi_query -很少使用它,只會使檢查成功變得更加困難。 如果您使用單獨的查詢插入到user_accounts ,則可以使用mysqli_insert_id($conn)來獲取插入到user_accounts時分配的user_id ,而不是使用上面的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. 第15行:在$ sql變量之前,在行的開頭有一個流氓'w'
  2. 您所有的$ _POST'ed參數都必須采用$ _POST ['parameter']格式(缺少引號,請記住將已引用的引號轉義)
  3. 第14行中的where子句子選擇查詢正在從不存在的表中進行選擇(blood_type)

我想您想實現的是'user_account'和'donor'之間的映射,您最好將外鍵存儲在'donor_id'的用戶帳戶表中,或將兩者鏈接的矩陣/映射表一起。

矩陣/映射表將同時保存來自user_account和捐助者的主鍵日期,以創建矩陣。

然后,您可以僅從信息的一側得知另一信息。

我還要確保您在查詢中轉義了入站變量,以防止發生任何SQL注入攻擊( 請參閱此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM