Во-первых, никогда не используйте 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'
(но опять же, никогда не вставляйте вашу переменную непосредственно в запрос, будь то чтение из БД или параметр запроса).