sql >> Databasteknik >  >> RDS >> Mysql

INFOGA värden från en tabell till en annan tabell

För det första, använd aldrig SELECT * i någon kod:det kommer att bita dig (eller den som måste underhålla den här applikationen) om tabellstrukturen ändras (säg aldrig aldrig).

Du kan överväga att använda en INSERT som tar sina värden från en SELECT direkt:

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

Du behöver inte gå via PHP för att göra detta.

(Ursäkta för att jag använder ett exempel ovan som förlitade sig på mysql_real_escape_string i en tidigare version av detta svar. Använda mysql_real_escape_string är ingen bra idé , även om det förmodligen är marginellt bättre än att sätta parametern direkt i frågesträngen.)

Jag är inte säker på vilken MySQL-motor du använder, men du bör överväga att göra dessa uttalanden inom en enda transaktion (du skulle behöva InnoDB istället för MyISAM).

Dessutom skulle jag föreslå att du använder mysqli och förberedda uttalanden för att kunna binda parametrar:detta är ett mycket renare sätt att inte behöva undkomma ingångsvärdena (för att undvika SQL-injektionsattacker).

EDIT 2:

(Du kanske vill stänga av de magiska citaten om de är på.)

$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: Jag hade inte insett ditt userID var en int (men det är förmodligen vad det är eftersom du har sagt att det automatiskt inkrementeras i en kommentar):casta det till ett int och/eller använd det inte som en sträng (d.v.s. med citattecken) i WHERE userID = '$userID' (men återigen, infoga aldrig din variabel direkt i en fråga, oavsett om den läses från DB eller en begäranparameter).



  1. mysql_fetch_array() returnerar 'det angivna argumentet är inte en giltig MySQL-resultatresurs'

  2. Hämta radprodukt (multiplikation)

  3. Hur importerar jag en SQL-fil till databasen och ignorerar X-rader i filen?

  4. Serverns tidszonsvärde 'AEST' är okänt eller representerar mer än en tidszon