Za prvé, nikdy nepoužívejte SELECT *
v nějakém kódu:kousne vás (nebo kohokoli, kdo musí tuto aplikaci udržovat), pokud se struktura tabulky změní (nikdy neříkej nikdy).
Můžete zvážit použití INSERT
který přebírá své hodnoty z SELECT
přímo:
"INSERT INTO admin(userID, forename, ..., `password`, ...)
SELECT userID, forename, ..., `password`, ...
FROM jobseeker WHERE userID = ..."
K tomu nemusíte používat PHP.
(Omlouvám se za použití výše uvedeného příkladu, který se spoléhal na mysql_real_escape_string
v dřívější verzi této odpovědi. Pomocí mysql_real_escape_string
není dobrý nápad
, i když je to pravděpodobně o něco lepší než vkládat parametr přímo do řetězce dotazu.)
Nejsem si jistý, který engine MySQL používáte, ale měli byste zvážit provádění těchto příkazů v rámci jedné transakce (potřebovali byste InnoDB místo MyISAM).
Kromě toho bych doporučil použít mysqli
a připravené výpisy
být schopen vázat parametry:toto je mnohem čistší způsob, jak nemuset unikat vstupním hodnotám (abyste se vyhnuli útokům SQL injection).
ÚPRAVA 2:
(Možná budete chtít vypnout kouzelné uvozovky, pokud jsou zapnuté.)
$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();
ÚPRAVA 3: Neuvědomil jsem si vaše userID
byl int (ale to je pravděpodobně to, co to je, protože jste v komentáři řekli, že se automaticky zvyšuje):převeďte jej na int a/nebo jej nepoužívejte jako řetězec (tj. s uvozovkami) v WHERE userID = '$userID'
(ale znovu, nikdy nevkládejte svou proměnnou přímo do dotazu, ať už čteného z DB nebo parametru požadavku).