[英]INSERTING values from one table into another table
我有這段代碼可以從“ jobseeker”表中選擇所有字段,並可以通過將userType設置為“ admin”來更新“ user”表,其中userID = $ userID(此userID是我用戶中的用戶數據庫)。 然后,該語句應將這些值從“ jobseeker”表插入“ admin”表,然后從“ jobseeker表”中刪除該用戶。 sql表很好,我的語句正在將userType更改為admin並從'jobseeker'表中獲取用戶...但是,當我進入數據庫(通過phpmyadmin)時,沒有添加任何細節的admin 。 請問有人能闡明為什么$ userData沒有將'jobseeker'表中的用戶詳細信息傳遞到'admin'表中嗎?
這是代碼:
<?php
include ('../database_conn.php');
$userID = $_GET['userID'];
$query = "SELECT * FROM jobseeker WHERE userID = '$userID'";
$result = mysql_query($query);
$userData = mysql_fetch_array ($result, MYSQL_ASSOC);
$forename = $userData ['forename'];
$surname = $userData ['surname'];
$salt = $userData ['salt'];
$password = $userData ['password'];
$profilePicture = $userData ['profilePicture'];
$sQuery = "UPDATE user SET userType = 'admin' WHERE userID = '$userID'";
$rQuery = "INSERT INTO admin (userID, forename, surname, salt, password, profilePicture) VALUES ('$userID', '$forename', '$surname', '$salt', '$password', '$profilePicture')";
$pQuery = "DELETE FROM jobseeker WHERE userID = '$userID'";
mysql_query($sQuery) or die (mysql_error());
$queryresult = mysql_query($sQuery) or die(mysql_error());
mysql_query($rQuery) or die (mysql_error());
$queryresult = mysql_query($rQuery) or die(mysql_error());
mysql_query($pQuery) or die (mysql_error());
$queryresult = mysql_query($pQuery) or die(mysql_error());
mysql_close($conn);
header ('location: http://www.numyspace.co.uk/~unn_v002018/webCaseProject/index.php');
?>
首先,切勿在某些代碼中使用SELECT *
:如果表結構發生變化(永遠不要說從不),它將(或必須維護此應用程序的人)咬住您。
您可以考慮使用直接從SELECT
獲取其值的INSERT
:
"INSERT INTO admin(userID, forename, ..., `password`, ...)
SELECT userID, forename, ..., `password`, ...
FROM jobseeker WHERE userID = ..."
您不必通過PHP來執行此操作。
(使用上面的示例在此答案的早期版本中依賴mysql_real_escape_string
道歉。 使用mysql_real_escape_string
並不是一個好主意 ,盡管可能比直接將參數直接放入查詢字符串要好一些。)
我不確定您使用的是哪個MySQL引擎,但是您也應該考慮在單個事務中執行這些語句(您需要InnoDB而不是MyISAM)。
另外,我建議使用mysqli
和prepared語句能夠綁定參數:這是一種更干凈的方法,不必轉義輸入值(以避免SQL注入攻擊)。
編輯2:
(如果啟用了魔術引號,則可能要關閉它們。)
$userID = $_GET['userID'];
// Put the right connection parameters
$mysqli = new mysqli("localhost", "user", "password", "db");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Use InnoDB for your MySQL DB for this, not MyISAM.
$mysqli->autocommit(FALSE);
$query = "INSERT INTO admin(`userID`, `forename`, `surname`, `salt`, `password`, `profilePicture`)"
." SELECT `userID`, `forename`, `surname`, `salt`, `password`, `profilePicture` "
." FROM jobseeker WHERE userID=?";
if ($stmt = $mysqli->prepare($query)) {
$stmt->bind_param('i', (int) $userID);
$stmt->execute();
$stmt->close();
} else {
die($mysqli->error);
}
$query = "UPDATE user SET userType = 'admin' WHERE userID=?";
if ($stmt = $mysqli->prepare($query)) {
$stmt->bind_param('i', (int) $userID);
$stmt->execute();
$stmt->close();
} else {
die($mysqli->error);
}
$query = "DELETE FROM jobseeker WHERE userID=?";
if ($stmt = $mysqli->prepare($query)) {
$stmt->bind_param('i', (int) $userID);
$stmt->execute();
$stmt->close();
} else {
die($mysqli->error);
}
$mysqli->commit();
$mysqli->close();
編輯3:我還沒有意識到您的userID
是一個int(但這可能是因為您已經說過它在注釋中自動增加了):將其轉換為int和/或不將其用作字符串(即帶引號)的WHERE userID = '$userID'
(但同樣,永遠不要將變量直接插入查詢中,無論是從數據庫中讀取還是從請求參數中讀取)。
您的代碼沒有什么明顯的錯誤(除了使用$ _GET中的非轉義值不安全之外)。
我建議您嘗試以下操作以進行調試:
如果您找不到問題,請回發您的發現以及要處理的表的結構
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.