Mysql
 sql >> Database >  >> RDS >> Mysql

INSERIRE valori da una tabella in un'altra tabella

Innanzitutto, non utilizzare mai SELECT * in qualche codice:ti morderà (o chi deve mantenere questa applicazione) se la struttura della tabella cambia (mai dire mai).

Potresti prendere in considerazione l'utilizzo di un INSERT che prende i suoi valori da un SELECT direttamente:

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

Non è necessario utilizzare PHP per farlo.

(Ci scusiamo per aver utilizzato un esempio sopra che si basava su mysql_real_escape_string in una versione precedente di questa risposta. Utilizzo di mysql_real_escape_string non è una buona idea , anche se probabilmente è leggermente meglio che inserire il parametro direttamente nella stringa di query.)

Non sono sicuro di quale motore MySQL stai utilizzando, ma dovresti considerare di fare anche quelle istruzioni all'interno di una singola transazione (avresti bisogno di InnoDB invece di MyISAM).

Inoltre, suggerirei di utilizzare mysqli e dichiarazioni preparate per poter associare i parametri:questo è un modo molto più pulito per non dover sfuggire ai valori di input (in modo da evitare attacchi di SQL injection).

EDIT 2:

(Potresti voler disattivare le virgolette magiche se sono attive.)

$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: Non avevo realizzato il tuo userID era un int (ma probabilmente è quello che è dato che hai detto che è auto-incrementato in un commento):esegui il cast su un int e/o non usarlo come una stringa (cioè con virgolette) in WHERE userID = '$userID' (ma ancora una volta, non inserire mai la tua variabile direttamente in una query, sia letta dal DB che da un parametro di richiesta).