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

INDSÆTNING af værdier fra en tabel til en anden tabel

For det første, brug aldrig SELECT * i en eller anden kode:det vil bide dig (eller hvem der nu skal vedligeholde denne applikation), hvis tabelstrukturen ændres (sig aldrig aldrig).

Du kunne overveje at bruge en INSERT der tager sine værdier fra en SELECT direkte:

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

Du behøver ikke at gå via PHP for at gøre dette.

(Undskyld for at bruge et eksempel ovenfor, der var afhængig af mysql_real_escape_string i en tidligere version af dette svar. Brug af mysql_real_escape_string er ikke en god idé , selvom det nok er marginalt bedre end at sætte parameteren direkte i forespørgselsstrengen.)

Jeg er ikke sikker på, hvilken MySQL-motor du bruger, men du bør også overveje at lave disse udsagn inden for en enkelt transaktion (du skal bruge InnoDB i stedet for MyISAM).

Derudover vil jeg foreslå at bruge mysqli og udarbejdede erklæringer at være i stand til at binde parametre:dette er en meget renere måde at ikke skulle undslippe inputværdierne (for at undgå SQL-injektionsangreb).

EDIT 2:

(Du vil måske slå de magiske citater fra, hvis de er slået til.)

$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: Jeg havde ikke opdaget dit userID var en int (men det er sandsynligvis, hvad det er, da du har sagt, at det er automatisk inkrementeret i en kommentar):cast det til en int og/eller brug det ikke som en streng (dvs. med anførselstegn) i WHERE userID = '$userID' (men igen, indsæt aldrig din variabel direkte i en forespørgsel, uanset om den er læst fra DB eller en anmodningsparameter).



  1. ADODFCMP Utility

  2. Kontroller, at tabellen eksisterer eller ej, før du opretter den i Oracle

  3. Cloud Vendor Deep-Dive:PostgreSQL på DigitalOcean

  4. Top Facebook-grupper til Analytics, Big Data, Data Mining, Hadoop, NoSQL, Data Science