Po pierwsze, nigdy nie używaj SELECT *
w jakimś kodzie:ugryzie cię (lub kogokolwiek, kto musi obsługiwać tę aplikację), jeśli zmieni się struktura tabeli (nigdy nie mów nigdy).
Możesz rozważyć użycie INSERT
który pobiera swoje wartości z SELECT
bezpośrednio:
"INSERT INTO admin(userID, forename, ..., `password`, ...)
SELECT userID, forename, ..., `password`, ...
FROM jobseeker WHERE userID = ..."
Aby to zrobić, nie musisz korzystać z PHP.
(Przepraszamy za użycie powyższego przykładu, który opierał się na mysql_real_escape_string
we wcześniejszej wersji tej odpowiedzi. Korzystanie z mysql_real_escape_string
nie jest dobrym pomysłem
, chociaż jest to prawdopodobnie nieznacznie lepsze niż umieszczenie parametru bezpośrednio w ciągu zapytania.)
Nie jestem pewien, którego silnika MySQL używasz, ale powinieneś rozważyć wykonanie tych instrukcji również w ramach jednej transakcji (będziesz potrzebował InnoDB zamiast MyISAM).
Ponadto sugerowałbym użycie mysqli
i przygotowane zestawienia
aby móc powiązać parametry:jest to znacznie czystszy sposób, aby nie musieć uciekać od wartości wejściowych (aby uniknąć ataków typu SQL injection).
EDYCJA 2:
(Możesz wyłączyć magiczne cytaty, jeśli są włączone).
$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();
EDYCJA 3: Nie rozpoznałem Twojego userID
był int (ale prawdopodobnie tak jest, ponieważ powiedziałeś, że jest automatycznie zwiększany w komentarzu):prześlij go na int i/lub nie używaj go jako ciągu (tj. z cudzysłowami) w WHERE userID = '$userID'
(ale znowu, nigdy nie wstawiaj swojej zmiennej bezpośrednio do zapytania, czy to odczytanego z bazy danych, czy parametru żądania).