Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MEMASUKKAN nilai dari satu tabel ke tabel lain

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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Database Salin MySQL

  2. Jumlahkan total beberapa kolom MySQL yang disimpan di kolom lain?

  3. mysql mengubah kunci unik menjadi primer (mariadb)

  4. Hapus kata-kata duplikat dari bidang di mysql

  5. hapus baris dari beberapa tabel