2016-04-03 19 views
0

我很努力地使用PHP語句將mySQL數據插入到多個表中。mySQL使用PHP語句插入多個表

我有兩個表:

用戶

USER_ID(PK)

FIRST_NAME

姓氏

電子郵件

密碼

輪廓

配置文件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語句像我之前做的那個?我試圖再次使用第一種方法,但它似乎沒有工作...

+0

** WARNING **:當使用'mysqli'你應該使用參數化查詢,而['bind_param'(HTTP:// PHP .net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您將創建嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **絕不**將'$ _POST'數據直接放入查詢中。 – tadman

+0

**警告**:編寫自己的訪問控制層並不容易,並且有很多機會使其嚴重錯誤。在這個簡短的例子中,你有一些危險的[SQL注入漏洞](http://bobby-tables.com/)來自於[正確轉義](http://bobby-tables.com/php) 。請不要在[Laravel](http://laravel.com/)等任何現代開發框架(http://codegeekz.com/best-php-frameworks-for-developers/)上編寫自己的認證系統,內置了強大的[認證系統](https://laravel.com/docs/5.2/authentication)。 – tadman

回答

0

插入創建新記錄,更新更改現有記錄。使用您當前的方案,您需要將INSERT插入到配置文件中。顯然,這意味着您不能使用相同的代碼來創建配置文件,因爲您可能會使用該配置文件來更改配置文件。但還有一個選項,REPLACE與INSERT的語法相同,但會覆蓋現有的記錄。

但是,如果每個用戶只有一個配置文件,細節應保存在一個表中,而不是兩個。

評論:作爲純文本存儲密碼是一個非常糟糕的主意,請閱讀密碼散列。您還應該擁有Google for SQL注入;您的身份驗證很容易繞過並容易破壞。

0

試試這個:

INSERT INTO 
`profile`(`user_ID`,`profile_image`,`profile_image_name`) 
VALUES 
('$user_ID','$profile_image','$profile_image_name') 
ON DUPLICATE KEY UPDATE 
`profile_image`='$profile_image',`profile_image_name`='$profile_image_name' 

user_ID必須是唯一的