Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

CHÈN giá trị từ một bảng vào một bảng khác

Thứ nhất, không bao giờ sử dụng SELECT * trong một số mã:nó sẽ cắn bạn (hoặc bất cứ ai phải duy trì ứng dụng này) nếu cấu trúc bảng thay đổi (không bao giờ nói không bao giờ).

Bạn có thể cân nhắc sử dụng INSERT lấy các giá trị của nó từ một SELECT trực tiếp:

"INSERT INTO admin(userID, forename, ..., `password`, ...)
    SELECT userID, forename, ..., `password`, ...
    FROM jobseeker WHERE userID = ..."

Bạn không cần phải sử dụng PHP để thực hiện việc này.

(Xin lỗi vì đã sử dụng một ví dụ ở trên dựa trên mysql_real_escape_string trong một phiên bản trước của câu trả lời này. Sử dụng mysql_real_escape_string không phải là một ý kiến ​​hay , mặc dù nó có lẽ tốt hơn một chút so với việc đặt tham số trực tiếp vào chuỗi truy vấn.)

Tôi không chắc bạn đang sử dụng công cụ MySQL nào, nhưng bạn cũng nên cân nhắc thực hiện các câu lệnh đó trong một giao dịch duy nhất (bạn sẽ cần InnoDB thay vì MyISAM).

Ngoài ra, tôi khuyên bạn nên sử dụng mysqli và các tuyên bố chuẩn bị sẵn để có thể liên kết các tham số:đây là một cách dễ dàng hơn nhiều để không phải thoát các giá trị đầu vào (để tránh các cuộc tấn công SQL injection).

CHỈNH SỬA 2:

(Bạn có thể muốn tắt các dấu ngoặc kép nếu chúng đang bật.)

$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();

CHỈNH SỬA 3: Tôi không nhận ra userID của bạn là một int (nhưng có thể đó là những gì bạn đã nói vì nó tự động tăng trong một nhận xét):truyền nó thành một int và / hoặc không sử dụng nó như một chuỗi (tức là có dấu ngoặc kép) trong WHERE userID = '$userID' (nhưng một lần nữa, đừng bao giờ chèn trực tiếp biến của bạn vào một truy vấn, dù là đọc từ DB hay tham số yêu cầu).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm kích thước của các chỉ mục trong mysql (bao gồm các khóa chính)

  2. $ result =mysql_query ()

  3. MySQL không hỗ trợ nhận xét dòng đơn ở đây. Lý do sẽ là gì?

  4. Không thể chèn các ký tự Hy Lạp đúng cách trong cơ sở dữ liệu mysql

  5. Làm cách nào để kết nối với Cơ sở dữ liệu MySQL từ Ứng dụng Android?