Първо, никога не използвайте SELECT *
в някакъв код:ще ви ухапе (или който и да е, който трябва да поддържа това приложение), ако структурата на таблицата се промени (никога не казвайте никога).
Можете да помислите за използването на INSERT
който взема своите стойности от SELECT
директно:
"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
и изготвени изявления
за да можете да свързвате параметри:това е много по-чист начин да не се налага да избягвате входните стойности (за да избегнете атаки с инжектиране на 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'
(но отново, никога не вмъквайте променливата си директно в заявка, независимо дали е прочетена от DB или параметър на заявка).