Pertama, jangan pernah menggunakan SELECT *
dalam beberapa kode:itu akan menggigit Anda (atau siapa pun yang harus memelihara aplikasi ini) jika struktur tabel berubah (jangan katakan tidak pernah).
Anda dapat mempertimbangkan untuk menggunakan INSERT
yang mengambil nilainya dari SELECT
langsung:
"INSERT INTO admin(userID, forename, ..., `password`, ...)
SELECT userID, forename, ..., `password`, ...
FROM jobseeker WHERE userID = ..."
Anda tidak harus melalui PHP untuk melakukan ini.
(Maaf karena menggunakan contoh di atas yang mengandalkan mysql_real_escape_string
dalam versi sebelumnya dari jawaban ini. Menggunakan mysql_real_escape_string
bukan ide yang bagus
, meskipun mungkin sedikit lebih baik daripada menempatkan parameter secara langsung ke dalam string kueri.)
Saya tidak yakin mesin MySQL mana yang Anda gunakan, tetapi Anda harus mempertimbangkan untuk melakukan pernyataan tersebut dalam satu transaksi juga (Anda akan membutuhkan InnoDB daripada MyISAM).
Selain itu, saya sarankan menggunakan mysqli
dan pernyataan siap
untuk dapat mengikat parameter:ini adalah cara yang jauh lebih bersih untuk tidak harus keluar dari nilai input (untuk menghindari serangan injeksi SQL).
EDIT 2:
(Anda mungkin ingin mematikan tanda kutip ajaib jika aktif.)
$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();
EDIT 3 Saya tidak menyadari userID
Anda adalah int (tapi mungkin itu karena Anda mengatakan itu bertambah secara otomatis dalam komentar):masukkan ke int dan/atau jangan gunakan sebagai string (yaitu dengan tanda kutip) di WHERE userID = '$userID'
(tetapi sekali lagi, jangan pernah menyisipkan variabel Anda secara langsung dalam kueri, baik yang dibaca dari DB atau parameter permintaan).