Mysql
 sql >> Datenbank >  >> RDS >> Mysql

EINFÜGEN von Werten aus einer Tabelle in eine andere Tabelle

Erstens:Verwenden Sie niemals SELECT * in irgendeinem Code:es wird Sie (oder wer auch immer diese Anwendung pflegen muss) beißen, wenn sich die Tabellenstruktur ändert (sagen Sie niemals nie).

Sie könnten die Verwendung eines INSERT in Betracht ziehen die ihre Werte von einem SELECT erhält direkt:

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

Dazu müssen Sie nicht über PHP gehen.

(Entschuldigung für die Verwendung eines obigen Beispiels, das sich auf mysql_real_escape_string stützte in einer früheren Version dieser Antwort. Verwendung von mysql_real_escape_string ist keine gute Idee , obwohl es wahrscheinlich etwas besser ist, als den Parameter direkt in die Abfragezeichenfolge einzufügen.)

Ich bin mir nicht sicher, welche MySQL-Engine Sie verwenden, aber Sie sollten erwägen, diese Anweisungen auch innerhalb einer einzigen Transaktion auszuführen (Sie würden InnoDB anstelle von MyISAM benötigen).

Außerdem würde ich vorschlagen, mysqli zu verwenden und vorbereitete Erklärungen Parameter binden zu können:Dies ist ein viel saubererer Weg, um die Eingabewerte nicht maskieren zu müssen (um SQL-Injection-Angriffe zu vermeiden).

BEARBEITEN 2:

(Möglicherweise möchten Sie die magischen Anführungszeichen deaktivieren, wenn sie aktiviert sind.)

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

BEARBEITEN 3: Ich hatte Ihre userID nicht erkannt war ein int (aber das ist es wahrscheinlich, da Sie gesagt haben, dass es in einem Kommentar automatisch inkrementiert wird):wandeln Sie es in ein int um und / oder verwenden Sie es nicht als Zeichenfolge (dh mit Anführungszeichen) in WHERE userID = '$userID' (Aber noch einmal, fügen Sie niemals Ihre Variable direkt in eine Abfrage ein, egal ob sie aus der DB oder einem Anforderungsparameter gelesen wird).