Mysql
 sql >> база данни >  >> RDS >> Mysql

ВМЕСВАНЕ на стойности от една таблица в друга таблица

Първо, никога не използвайте 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' (но отново, никога не вмъквайте променливата си директно в заявка, независимо дали е прочетена от DB или параметър на заявка).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – Тази версия на MySQL все още не поддържа подзаявка „LIMIT &IN/ALL/ANY/SOME

  2. Percona Live Dublin – Резюме на събитието и нашите сесии

  3. Важно ли е затварянето на mysql връзката?

  4. Код за грешка в MySQL:1175 по време на АКТУАЛИЗИРАНЕ (MySQL-Workbench срещу конзола)

  5. PHP - Направете ключа на масива на моята заявка в ID