Mysql
 sql >> Baza danych >  >> RDS >> Mysql

WSTAWIANIE wartości z jednej tabeli do innej tabeli

Po pierwsze, nigdy nie używaj SELECT * w jakimś kodzie:ugryzie cię (lub kogokolwiek, kto musi obsługiwać tę aplikację), jeśli zmieni się struktura tabeli (nigdy nie mów nigdy).

Możesz rozważyć użycie INSERT który pobiera swoje wartości z SELECT bezpośrednio:

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

Aby to zrobić, nie musisz korzystać z PHP.

(Przepraszamy za użycie powyższego przykładu, który opierał się na mysql_real_escape_string we wcześniejszej wersji tej odpowiedzi. Korzystanie z mysql_real_escape_string nie jest dobrym pomysłem , chociaż jest to prawdopodobnie nieznacznie lepsze niż umieszczenie parametru bezpośrednio w ciągu zapytania.)

Nie jestem pewien, którego silnika MySQL używasz, ale powinieneś rozważyć wykonanie tych instrukcji również w ramach jednej transakcji (będziesz potrzebował InnoDB zamiast MyISAM).

Ponadto sugerowałbym użycie mysqli i przygotowane zestawienia aby móc powiązać parametry:jest to znacznie czystszy sposób, aby nie musieć uciekać od wartości wejściowych (aby uniknąć ataków typu SQL injection).

EDYCJA 2:

(Możesz wyłączyć magiczne cytaty, jeśli są włączone).

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

EDYCJA 3: Nie rozpoznałem Twojego userID był int (ale prawdopodobnie tak jest, ponieważ powiedziałeś, że jest automatycznie zwiększany w komentarzu):prześlij go na int i/lub nie używaj go jako ciągu (tj. z cudzysłowami) w WHERE userID = '$userID' (ale znowu, nigdy nie wstawiaj swojej zmiennej bezpośrednio do zapytania, czy to odczytanego z bazy danych, czy parametru żądania).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP wiele poleceń MYSQL w jednym zapytaniu mysql_query()

  2. MySQL łączy dwie kolumny i dodaje do nowej kolumny

  3. Skryptowanie przez ssh przez kit na windows

  4. PHP-MySQL-Jak bezpiecznie zwiększać pole integer MySQL?

  5. BŁĄD 1064 (42000):Wystąpił błąd w składni SQL; Chcesz skonfigurować hasło jako root będąc użytkownikiem