sql >> Database >  >> RDS >> Mysql

Waarden van de ene tabel in een andere tabel INVOEGEN

Gebruik ten eerste nooit SELECT * in sommige code:het zal je bijten (of degene die deze applicatie moet onderhouden) als de tabelstructuur verandert (zeg nooit nooit).

Je zou kunnen overwegen om een ​​INSERT . te gebruiken die zijn waarden haalt uit een SELECT direct:

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

Je hoeft hiervoor niet via PHP te gaan.

(Excuses voor het gebruik van een voorbeeld hierboven dat was gebaseerd op mysql_real_escape_string in een eerdere versie van dit antwoord. mysql_real_escape_string gebruiken is geen goed idee , hoewel het waarschijnlijk iets beter is dan de parameter rechtstreeks in de queryreeks te plaatsen.)

Ik weet niet zeker welke MySQL-engine u gebruikt, maar u zou moeten overwegen om die verklaringen ook binnen een enkele transactie te doen (u zou InnoDB nodig hebben in plaats van MyISAM).

Daarnaast raad ik aan om mysqli te gebruiken en opgestelde verklaringen om parameters te kunnen binden:dit is een veel schonere manier om niet te hoeven ontsnappen aan de invoerwaarden (om SQL-injectie-aanvallen te voorkomen).

BEWERK 2:

(Misschien wilt u de magische aanhalingstekens uitschakelen als ze aan staan.)

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

BEWERK 3: Ik had je userID niet gerealiseerd was een int (maar dat is waarschijnlijk wat het is omdat je hebt gezegd dat het automatisch wordt verhoogd in een opmerking):cast het naar een int en/of gebruik het niet als een string (d.w.z. met aanhalingstekens) in WHERE userID = '$userID' (maar nogmaals, voeg uw variabele nooit rechtstreeks in een query in, of deze nu wordt gelezen uit de DB of een verzoekparameter).



  1. Op zoek naar hoofdletterongevoelige MySQL-sortering waarbij een !=ä

  2. ODP.NET implementeren en configureren om te werken zonder installatie met Entity Framework

  3. selecteer gedupliceerd record en tel record van komma gescheiden in mysql

  4. SQL Server-tabellen:wat is het verschil tussen @, # en ##?