[英]INSERT into mySQL
所以我有3個表: donor
, blood_type
, user_account
。 我正在嘗試填充包含user_id
和blood_id
的donor
表,但是blood_group
和user_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);
該代碼段存在一些錯誤:
我想您想實現的是'user_account'和'donor'之間的映射,您最好將外鍵存儲在'donor_id'的用戶帳戶表中,或將兩者鏈接的矩陣/映射表一起。
矩陣/映射表將同時保存來自user_account和捐助者的主鍵日期,以創建矩陣。
然后,您可以僅從信息的一側得知另一信息。
我還要確保您在查詢中轉義了入站變量,以防止發生任何SQL注入攻擊( 請參閱此處 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.