Em primeiro lugar, nunca use
SELECT *
em algum código:ele vai morder você (ou quem tiver que manter este aplicativo) se a estrutura da tabela mudar (nunca diga nunca). Você pode considerar usar um
INSERT
que obtém seus valores de um SELECT
diretamente:"INSERT INTO admin(userID, forename, ..., `password`, ...)
SELECT userID, forename, ..., `password`, ...
FROM jobseeker WHERE userID = ..."
Você não precisa ir via PHP para fazer isso.
(Desculpas por usar um exemplo acima que dependia de
mysql_real_escape_string
em uma versão anterior desta resposta. Usando mysql_real_escape_string
não é uma boa ideia
, embora provavelmente seja um pouco melhor do que colocar o parâmetro diretamente na string de consulta.) Não tenho certeza de qual mecanismo MySQL você está usando, mas você deve considerar fazer essas instruções em uma única transação também (você precisaria do InnoDB em vez do MyISAM).
Além disso, sugiro usar
mysqli
e declarações preparadas
para poder vincular parâmetros:esta é uma maneira muito mais limpa de não ter que escapar dos valores de entrada (para evitar ataques de injeção de SQL). EDIÇÃO 2:
(Você pode querer desativar as aspas mágicas se elas estiverem ativadas.)
$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();
EDIÇÃO 3: Eu não tinha percebido seu
userID
era um int (mas provavelmente é isso, já que você disse que é incrementado automaticamente em um comentário):converta-o em um int e/ou não o use como uma string (ou seja, com aspas) em WHERE userID = '$userID'
(mas, novamente, nunca insira sua variável diretamente em uma consulta, seja lida do banco de dados ou de um parâmetro de solicitação).